Как мьютекс создается в Linux? - PullRequest
2 голосов
/ 09 января 2011

Я хотел бы знать, как мьютекс создается в Linux?Я понял, что pthread_mutex_init() не меняет значение переменной pthread_mutex_t, так как он "создает" мьютекс?

Отмечает ли она эту переменную как какой-то системный ресурс или как?

Я реализовывал конструктор R-значения для класса, в теле которого есть поле pthread_mutex_t, и я не знаю, как переместить мьютекс из одного класса в другой ...

Ответы [ 2 ]

4 голосов
/ 10 января 2011

Вы можете увидеть, что делает pthread_mutex_init здесь (предупреждение, у вас болит мозг).

Это делает memset () мьютексом.

Однако мьютексы реализованыповерх futex звонков.Это работает с адресами памяти, то есть адрес одного из членов pthread_mutex_t используется в качестве системного ресурса.Это означает, что вы не можете копировать / перемещать pthread_mutex_t.

1 голос
/ 10 января 2011

Похоже, вы хотите передать право собственности на мьютекс другому классу. Вы уверены, что это правильный способ решить вашу проблему? Если вам абсолютно необходимо это сделать, вы можете создать auto_ptr для передачи прав владения:

class A
{
   A(const A & other) mutex(other.mutex) { /* ... */ }

   auto_ptr<pthread_mutex_t> mutex;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...