linux操作系统之菠菜网站架设

(1)条件变量

           菠菜网站架设【企 娥:217 1793 408】条件变量本身不是锁,但它可以造成线程阻塞,通常与互斥锁配合使用。

(2)条件锁相关函数

          pthread_cond_t类型,用于定义条件变量

     1)初始化一个条件变量:pthread_cond_init

             int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);

           参数2:条件变量的属性,传NULL即可,为默认值

           可采用静态初始化:pthread _cond_t cond=PTHREAD_COND_INITIALIZER;

     2)销毁一个条件变量:pthread_cond_destroy

            int pthread_cond_destroy(pthread_cond_t *cond);

     3)阻塞等待条件变量:pthread_cond_wait(配合互斥锁使用)

            int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);

            函数作用: 

                       1>阻塞等待条件变量cond满足。

                       2>释放已掌握的互斥锁(解锁互斥量)相当于pthread_mutex_unlock(&mutex); 

                                       第1,2步为一个原子操作

                      3>当被唤醒,pthread_cond_wait函数返回,解除阻塞并重新获得互斥锁pthread_mutex_lock(&mutex)

     4)限时等待一个条件变量(以绝对时间等待):pthread_cond_timewait

            int pthread_cond_timewait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,condt struct timespec*restrcit abstime);

         struct timespec{

                      time_t tv_sec;//秒

                     long    tv_nsec;//纳秒

          };

abstime;绝对时间,通过time(NULL)函数获取;

      5)唤醒至少一个阻塞在条件变量上的线程:pthread_cond_signal

           int pthread_cond_signal(pthread_cond_t *cond);

    6)唤醒全部阻塞在条件变量上的线程:pthread_cond_broadcast(pthread_cond_t  *cond);

(3)线程同步之生产者消费者变量模型

猜你喜欢

转载自blog.51cto.com/13955264/2170472