嵌入式Linux应用程序开发——多线程3(线程的同步——条件变量)
2019-07-13 04:26发布
生成海报
#include
#include
#include
#include
int global;
unsigned int ready = 0;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*条件变量静态初始化*/
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *thread_function(void *arg)
{
int i,j;
for(i=0;i<10;i++)
{
pthread_mutex_lock(&mutex);
j = global;
j++;
printf("-");
fflush(stdout);
global = j;
pthread_mutex_unlock(&mutex);
ready = 1;
pthread_cond_signal(&cond);/*激活一个等待该条件的线程*/
usleep(200);/*微小延时确保线程运行的公平争夺CPU*/
}
return NULL;
}
int main(void)
{
pthread_t th_new;
int i;
setbuf(stdout,NULL);
if(pthread_create(&th_new,NULL,thread_function,NULL))
{
perror("error creating thread.");
abort();
}
for(i=0;i<10;i++)
{
pthread_mutex_lock(&mutex);
while(ready==0)
pthread_cond_wait(&cond,&mutex);/*等待条件,做的第一件事是对互斥对象解锁,等到条件激活,就立即再给互斥对象上锁*/
ready--;
global++;
printf("m");
fflush(stdout);
pthread_mutex_unlock(&mutex);
}
if(pthread_join(th_new,NULL))
{
perror("error joining thread");
abort();
}
printf("
result is :%d
",global);
exit(0);
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮