互斥锁常用函数:
互斥锁的操作主要包括以下几个步骤。互斥锁初始化:pthread_mutex_init互斥锁上锁:pthread_mutex_lock互斥锁判断上锁:pthread_mutex_trylock互斥锁接锁:pthread_mutex_unlock消除互斥锁:pthread_mutex_destroy
条件变量常用函数:
int pthread_condattr_init(pthread_condattr_t *attr);int pthread_condattr_destroy(pthread_condattr_t *attr);pthread_condattr_getpshared函数在由valptr指向的整数中返回这个属性的当前值,pthread_condattr_setpshared则根据value的值设置这个属性的当前值。value的值可以是PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED(进程间共享).
等待线程
1。使用pthread_cond_wait前要先加锁 2。pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活(处于阻塞)。 3。pthread_cond_wait被激活后会再自动加锁
激活线程: 1。加锁(和等待线程用同一个锁) 2。pthread_cond_signal发送信号 3。解锁 激活线程的上面三个操作在运行时间上都在等待线程的pthread_cond_wait函数内部。 程序示例: #include <stdio.h> #include <pthread.h> #include <unistd.h> pthread_mutex_t count_lock; pthread_cond_t count_nonzero; unsigned count = 0; void * decrement_count(void *arg) { pthread_mutex_lock (&count_lock); printf("decrement_count get count_lock\n"); while(count==0) { printf("decrement_count count == 0 \n"); printf("decrement_count before cond_wait \n"); pthread_cond_wait( &count_nonzero, &count_lock); printf("decrement_count after cond_wait \n"); } count = count -1; pthread_mutex_unlock (&count_lock); }
void * increment_count(void *arg){ pthread_mutex_lock(&count_lock); printf("increment_count get count_lock\n"); if(count==0) { printf("increment_count before cond_signal\n"); pthread_cond_signal(&count_nonzero); printf("increment_count after cond_signal\n"); } count=count+1; pthread_mutex_unlock(&count_lock);
}
int main(void) { pthread_t tid1,tid2; pthread_mutex_init(&count_lock,NULL); pthread_cond_init(&count_nonzero,NULL); pthread_create(&tid1,NULL,decrement_count,NULL); sleep(2); pthread_create(&tid2,NULL,increment_count,NULL); sleep(10); pthread_exit(0); }
有我们特有的记忆,亲情之忆友谊之花爱情之树以及遗憾之泪!