1.编译该程序需要链接库 gcc test.c -lpthread
2.主进程连续发送多个signal给子线程,尽管子线程来不及处理但是没有丢西信号量,所以在可以验证该机制有队列机制
#include<stdio.h>
#include <pthread.h>
#include<stdlib.h>
#include <string.h>
#include <semaphore.h>
#include <stdio.h>
#include <unistd.h>
char buf[100]={0};
int flag; //设置标志位
sem_t signal; //声明信号量
void *thread(void *arg)
{
while(flag==0)
{
sem_wait(&signal);
printf("run thread\n");
sleep(1); //休眠10us
}
pthread_exit(NULL);//进程退出
}
int main(void)
{
int i=0;
int ret=-1;
pthread_t th_a;
sem_init(&signal,0,0);
ret=pthread_create(&th_a,NULL,thread,NULL);
if (ret != 0)
{
printf("pthread_create error.\n");
return -1;
}
printf("input a string to run.\n");
while(scanf("%s",buf))
{
if(!strncmp(buf,"over",4))
{
flag==1;
sem_post(&signal);
break;
}
for(i=0;i<100;i++)
{
sem_post(&signal);
}
}
// 回收子线程
ret = pthread_join(th_a, NULL);
if (ret != 0)
{
printf("pthread_join error.\n");
exit(-1);
}
printf("子线程回收成功\n");
sem_destroy(&signal);
return 0;
}