OK. Здесь приведен пример использования pthread lib в c.
. В учебнике я обнаружил следующий код:
//for thread 2
pthread_mutex_lock(&lock);
should_wake_up = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
Этот код работает довольно хорошо. Мне просто интересно, будет ли работать следующий код?
//for thread 2
pthread_mutex_lock(&lock);
should_wake_up = 1;
pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond);//signal the conditional variable but the lock is not held
Какие плюсы и минусы для следующего кода?
PS. Предположим, что сотрудничающий поток имеет код:
//for thread 1
pthread_mutex_lock(&lock);
while(!should_wake_up)
pthread_cond_wait(&cond, &lock);
pthead_mutex_unlock(&lock);
PS2. Я столкнулся с другим вопросом, который указывает на то, что если мы не хотим, чтобы сигнал был потерян, мы должны использовать блокировку, чтобы убедиться, что связанный предикат (в данном случае - should_wake_up) не может быть изменен, когда блокировка удерживается в поток 1. В этом случае, похоже, это не проблема. Ссылка на пост: [1]: сигнал по условной переменной без удержания блокировки . Я думаю, его проблема в том, что он забыл о блокировке. Но мой вопрос другой.