mutex



Мьютекс

Автор 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() {
   // . .
}

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: mutex, C

Что такое СИНХРОНИЗАЦИЯ? Для чего она нужна?
Синхронизация (от греч. synchronos — одновременный) в информатике обозначает одно из двух:
подробнее...
спросили в Varig Ботнеты
кто такая и чем грозит: Virus.Win32.Virut.ce ???
Технической информации (анализ)
Win32/Virut семейство файл заражения вирусами, цели и
подробнее...
спросили в Другое
Что такое синхронизация?
Синхронизация (от греч. synchronos — одновременный) в информатике обозначает одно из двух:
подробнее...
спросили в Weezer
C++ GetWindowText висит
CString strBuffer

GetWindowText (strBuffer); SetWindowText (strBuffer);
попробуйте
подробнее...

Многопоточность в DELPHI
многопоточность - один печатает, другой вывод на экран, третий считает сего-нибудь... Если надо
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

Qt, синхронизация потоков с помощью мьютекса
mutex->lock() и mutex->unlock() должны вызываться в потоках перед обращением к разделяемому
подробнее...
POSIX Threads на Википедии
Посмотрите статью на википедии про POSIX Threads
Мьютекс на Википедии
Посмотрите статью на википедии про Мьютекс
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*