您的位置:首页 > 其它

用互斥线程进行同步

2012-07-01 19:29 295 查看
#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <pthread.h>

#include <semaphore.h>

void *thread_function(void *arg);

pthread_mutex_t work_mutex;

#define MSIZE 1024

char work_area[MSIZE];

int time_to_exit=0;

int main()

{

int res;

pthread_t a_thread;

void *thread_result;

res=pthread_mutex_init(&work_mutex,NULL);

if(res!=0)

{

perror("Mutex init failed!\n");

exit(EXIT_FAILURE);

}

res=pthread_create(&a_thread,NULL,thread_function,NULL);

if(res!=0)

{

perror("Thread creation failed!\n");

exit(EXIT_FAILURE);

}

pthread_mutex_lock(&work_mutex);

printf("Input some text.Enter 'end' to finish\n");

while(!time_to_exit)

{

fgets(work_area,MSIZE,stdin);

pthread_mutex_unlock(&work_mutex);

while(1)

{

pthread_mutex_lock(&work_mutex);

if(work_area[0]!='\0')

{

pthread_mutex_unlock(&work_mutex);

sleep(1);

}

else

break;

}

}

pthread_mutex_unlock(&work_mutex);

printf("\nWaiting for thread to finish...\n");

res=pthread_join(a_thread,&thread_result);

if(res!=0)

{

perror("Thread join failed!\n");

exit(EXIT_FAILURE);

}

printf("Thread joined\n");

pthread_mutex_destroy(&work_mutex);

exit(EXIT_SUCCESS);

}

void *thread_function(void *arg)

{

sleep(1);

pthread_mutex_lock(&work_mutex);

while(strncmp("end",work_area,3)!=0)

{

printf("Ypu input %d num\n",strlen(work_area)-1);

work_area[0]='\0';

pthread_mutex_unlock(&work_mutex);

sleep(1);

pthread_mutex_lock(&work_mutex);

while(work_area[0]=='\0')

{

pthread_mutex_unlock(&work_mutex);

sleep(1);

pthread_mutex_lock(&work_mutex);

}

}

time_to_exit=1;

work_area[0]='\0';

pthread_mutex_unlock(&work_mutex);

pthread_exit(0);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: