线程Semaphore的简单实例

#include<stdio.h>
#include<pthread.h>
#include<semaphore.h>
#include<malloc.h>

struct job{
 struct job* next;
};

struct job* job_queue;
pthread_mutex_t job_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
sem_t job_queue_count;

void initialize_job_queue()
{
 job_queue = NULL;
 sem_init (&job_queue_count,0,0);
}
void process_job(struct job *next_job)
{
 static int i = 0;
 printf("you is  a reader%d/n",i++);
}
void* thread_function(void *arg)
{
 while(1) 
 {
  struct job* next_job;
  sem_wait(&job_queue_count);
  pthread_mutex_lock(&job_queue_mutex);
  next_job = job_queue;
  job_queue=job_queue->next;
  pthread_mutex_unlock(&job_queue_mutex);
  process_job(next_job);
  free(next_job);
 }
}
void* enqueue_job(void* arg)
{
 struct job* new_job;
 new_job = (struct job*)malloc(sizeof(struct job));
 pthread_mutex_lock(&job_queue_mutex);
 new_job->next = job_queue;
 job_queue = new_job;
 sem_post(&job_queue_count);
 pthread_mutex_unlock(&job_queue_mutex);
}
int main()
{
 int i=0;
 pthread_t thread;
 initialize_job_queue();
 while(i < 7)
 {
  pthread_create(&thread,NULL,&enqueue_job,NULL);
  pthread_create(&thread,NULL,&thread_function,NULL);
  i++;
 }
 return 0; 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值