[Сравнительные] очерки и мьютекс семафора

Преимущества:

«Семафор асинхронный сигнал безопасен» (ссылка [2])

Недостатки:

«Я думаю, что не нужны примитивы синхронизации семафора, потому что с условным переменным мьютексом может полностью заменить свою функцию, и менее подвержены ошибкам ... Еще одна проблемы, с семафорами, что он имеет свое собственное значение счетчика, как правило, наши собственные структуры данных также имеет значение длины, в результате которой в той же самой информации, сохраненной два «(ссылка [1])

«Поток может увеличить сигнал является уменьшение количества другого потока, эта гибкость может привести к ухудшению структуры синхронного дизайна» (ссылка [2])

 Вывод:

применения семафоров, можно считать заменены мьютексом + переменным условием.

Семафор параллельное программирование вроде «Гото» в целом, но это простой интерфейс, легкий вызов.

------------------------------------------

Кроме того, их правильное неверное представление: значение сигнала количестве 1 эквивалент в мьютекс.

Только вы должны написать один практический производитель - потребитель одного демо можно понять.

Пример 1:

1  // кодирование резьбы 
2  thread_encode () {
 . 3    из sem_wait (& task_assigned); // заблокированными задач , ожидающих 
. 4    кодирования ();
 . 5    sem_post (& task_done);  // уведомляет выполнения задачи 
6  }
 7  // задача резьбы 
8.  Thread_main () {
 9.    из sem_wait (& task_done);  // блокируется в ожидании завершения задачи 
10    send_data_if_has ();
 . 11    New_Task ();
 12    sem_post (& task_assigned); // выдано уведомление задача 
13  }
 14 sem_init (& task_done, 0 , 1. );// начальное состояние, "задача не завершена" 
15 sem_init (& task_assigned, 0 , 0 ); // не новое распределение задач

Сравнительный пример 2

1  // 编码线程
2  thread_encode () {
 3      pthread_mutex_lock (& мьютекс);
4    кодирования ();
5      pthread_mutex_unlock (& мьютекс);
6  }
 7  // 任务线程
8  thread_encode () {
 9      pthread_mutex_lock (& мьютекс);
10    send_data_if_has ();
11    new_task ();
12    pthread_mutex_unlock (& мьютекс);
13 }

разница

 

 

ссылка

[1] «Linux многопоточное программирование на стороне сервера,» Тема синхронизации Основы Главы 2.3 для чтения и записи, не используйте замки и семафоры

[2] «Linux Руководство по программированию» Р907 POSIX Pthreads мьютекс семафор в сравнении

 

рекомендация

отwww.cnblogs.com/i-am-normal/p/11710788.html