c线程间信号量同步

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;
}

猜你喜欢

转载自blog.csdn.net/bin_zhang1/article/details/80752076