//信号量一般用来保护一段代码,有二进制信号量和计数信号量,这里前者
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
int *fun(int *i);
sem_t mysem;
int main()
{
int res;
void *pthread_result; //用来获取线程的返回值
int i = 0;
res = sem_init(&mysem, NULL, 1); //第三个参数为1表示可用资源为1; 第二个参数表示能否在多进程间共享
if(0 != res)
{
perror("sem init error\n");
}
//创建新线程
pthread_t mythread;
res = pthread_create(&mythread, NULL, fun, &i); //第三个和第四个属性可是是任何类型的指针
if(0 != res)
{
perror("create thread error\n");
}
int x_main = 0;
sem_wait(&mysem); //使信号量的值减去1,当减去后为负数则阻塞
for(;x_main< 500;x_main++)
printf("now number is %d\n",i++);
sem_post(&mysem); //使信号量的值加1
//等待线程结束
res = pthread_join(mythread, &pthread_result);// 一种观点认为, 这个函数会导致主线程阻塞
if(0 != res)
{
perror("join failed\n");
}
//锁使用完成后, 释放锁资源
sem_destroy(&mysem);
printf("the number of i is: %d\n", i);
printf("thread return: %s\n",pthread_result);
return 0;
}
int *fun(int *i)
{
int x_thread = 0;
sem_wait(&mysem);
for(;x_thread< 500;x_thread++)
printf("now number is %d\n",(*i)++);
sem_post(&mysem);
pthread_exit("the thread has exit");
}
网络编程系列之三 信号量
最新推荐文章于 2023-08-06 23:17:48 发布