| |||
![]()
|
![]() ![]() |
![]()
Неожиданно обнаружил очень давно увиденный и, казалось, навсегда потерянный очень приятный текст: "Multithreaded Programming Guide" от Sun Вот тут http://www4.ncsu.edu/~rhee/clas/csc а тут http://docs.oracle.com/cd/E19253-01/8 Пожалуй, неплохое введение в кондвары (наверное, я так думаю, потому что в этой книге впервые о них внятно прочитал). Впрочем, в документе есть ряд довольно сомнительных мест, способных, пожалуй, и запутать. Помимо скорее уже ошибочных мест, мне вот этот пассаж не понятен: This function [pthread_cond_wait] blocks until the condition is signaled. The function atomically releases the associated mutex lock before blocking, and atomically acquires the mutex again before returning. Вот это второе "atomically" несколько непонятно, при том, что в Sun-овской документации http://www.manpages.info/sunos/pthread_ Вот еще забавный пассажик, надолго извративший понимание темы (оно до сих пор извращено): Since pthread_cond_broadcast() causes all threads blocked on the condition to contend again for the mutex lock, use pthread_cond_broadcast() with care. На самом деле, это pthread_cond_signal надо использовать с осторожностью, а если вам приходится с острожностью использовать pthread_cond_broadcast - это скорее всего означает, что у вас ошибочный код. Вообще, pthread_cond_broadcast должна бы по идее объясняться первой и быть "дефолтной" функцией сигнализации, а pthread_cond_signal вводиться как некая опасная оптимизация, частный специализированный случай броадкаста. Но такой взгляд на вещи пока распространения не получил. |
||||||||||||||
![]() |
![]() |