您的位置:首页 > 其它

使用信号量实现线程间同步

2013-08-10 12:25 351 查看
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <semaphore.h>

#define SIZE 1024

void *thread_function(void *arg);

char buffer[SIZE];
sem_t sem;

int main()
{
int res;
pthread_t a_thread;
void *thread_result;

res = sem_init(&sem, 0, 0);
if (res != 0)
{
perror("Sem init failed");
exit(EXIT_FAILURE);
}

res = pthread_create(&a_thread, NULL, thread_function, NULL);
if (res != 0)
{
perror("Thread create failed");
exit(EXIT_FAILURE);
}

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

while (scanf("%s", buffer))
{
printf ("\n#Input: %s\n", buffer);
sem_post(&sem);
if (strncmp("end", buffer, 3) == 0)
break;
}

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

res = pthread_join(a_thread, &thread_result);
printf ("\n%s\n", thread_result);

if (res != 0)
{
perror("Thread join failed");
exit(EXIT_FAILURE);
}

printf ("Thread join\n");

sem_destroy(&sem);

exit(EXIT_SUCCESS);
}

void *thread_function(void *arg)
{
sem_wait(&sem);
while (strncmp("end", buffer, 3) != 0)
{
printf("#You input %d characters\n", strlen(buffer));
sem_wait(&sem);
}
pthread_exit("thread exit successfully...\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: