Мьютекс
Автор Paperrose задал вопрос в разделе Другие языки и технологии
mutex, C и получил лучший ответ
Ответ от Carlos[гуру]
C помощью макроса PTHREAD_MUTEX_INITIALIZER можно установить стандартные параметры мьютекса, может использоваться если мы хотим использовать параметры по умолчанию или для инициализации статических мьютексов:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
C помощью функции int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) инициализируется мьютекс mutex в соответствии с указанными параметрами attr, имеет смысл использовать, если мы хотим использовать не стандартные параметры, например, при задании типа мьютекса:
pthread_mutex_t mutex;
pthread_mutexattr_t attributes;
pthread_mutexattr_init(&attributes);
pthread_mutexattr_settype(&attributes, PTHREAD_MUTEX_FAST_NP);
pthread_mutex_init(&mutex, &attributes);
PS: Не забываем что функции могут завершиться с ошибкой и их возвращаемое значение надо проверять.
Carlos
Мастер
(2423)
PTHREAD_MUTEX_INITIALIZER это макрос, макросы зло (например у меня эта штука разворачивается в { { 0, 0, 0, 0, 0, { 0 } } })
Поэтому например не компилируется код:
#include <pthread.h>
void func(pthread_mutex_t *mutex) {
*mutex = PTHREAD_MUTEX_INITIALIZER;
}
int main() {
pthread_mutex_t mutex;
func(&mutex);
return 0;
}
Что возможно исправляется с помощью:
void func(pthread_mutex_t *mutex) {
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
*mutex = m;
}
Мьютексы эта така штука которая постоянно не инициализируется, так что можно создавать и динамически.
А макрос скорее всего предполагается использовать в случае:
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int main() {
// . .
}
Что такое СИНХРОНИЗАЦИЯ? Для чего она нужна?
Синхронизация (от греч. synchronos — одновременный) в информатике обозначает одно из двух:
подробнее...
кто такая и чем грозит: Virus.Win32.Virut.ce ???
Технической информации (анализ)
Win32/Virut семейство файл заражения вирусами, цели и
подробнее...
Что такое синхронизация?
Синхронизация (от греч. synchronos — одновременный) в информатике обозначает одно из двух:
подробнее...
C++ GetWindowText висит
CString strBuffer
GetWindowText (strBuffer); SetWindowText (strBuffer);
попробуйте
подробнее...
Многопоточность в DELPHI
многопоточность - один печатает, другой вывод на экран, третий считает сего-нибудь... Если надо
подробнее...
Qt, синхронизация потоков с помощью мьютекса
mutex->lock() и mutex->unlock() должны вызываться в потоках перед обращением к разделяемому
подробнее...