官术网_书友最值得收藏!

Synchronization

Functions which implement synchronization are prefixed with pthread_rwlock_ or pthread_barrier_. These implement read/write locks and synchronization barriers.

A read/write lock (rwlock) is very similar to a mutex, except that it has the additional feature of allowing infinite threads to read simultaneously, while only restricting write access to a singular thread.

Using rwlock is very similar to using a mutex:

#include <pthread.h> 
int pthread_rwlock_init(pthread_rwlock_t* rwlock, const pthread_rwlockattr_t* attr);
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;

In the last code, we include the same general header, and either use the initialization function, or the generic macro. The interesting part is when we lock rwlock, which can be done for just read-only access:

int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock); 
int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock);

Here, the second variation returns immediately if the lock has been locked already. One can also lock it for write access as follows:

int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock); 
int pthread_rwlock_trywrlock(pthread_rwlock_t * rwlock);

These functions work basically the same, except that only one writer is allowed at any given time, whereas multiple readers can obtain a read-only lock.

Barriers are another concept with Pthreads. These are synchronization objects which act like a barrier for a number of threads. All of these have to reach the barrier before any of them can proceed past it. In the barrier initialization function, the thread count is specified. Only once all of these threads have called the barrier object using the pthread_barrier_wait() function will they continue executing.

主站蜘蛛池模板: 桃园市| 绵阳市| 梅河口市| 家居| 澎湖县| 泸水县| 鄂托克前旗| 铜川市| 那坡县| 昭觉县| 蒙自县| 渭南市| 中方县| 菏泽市| 达州市| 葵青区| 乌兰浩特市| 肃南| 西充县| 外汇| 锡林浩特市| 浦城县| 光泽县| 肃宁县| 新巴尔虎左旗| 西青区| 凉城县| 福贡县| 新河县| 四子王旗| 邢台市| 南靖县| 昭平县| 天镇县| 义马市| 洪洞县| 三原县| 鸡东县| 庆城县| 潮州市| 辛集市|