用信号量(互斥锁)实现两个线程交替打印

本文实现两个线程交替打印,采用的是逐步添加代码,分析每一步代码的作用,若想要看最终版本可直接翻看后面的最终版本。(本文以信号量为例,互斥锁的实现只需将信号量的函数换成相应的互斥锁的函数,互斥锁(信号量)函数不知道的看https://blog.csdn.net/liqiao_418/article/details/83684347

首先实现两个线程的打印,不加入信号量的应用,代码如下:(注:以下执行结果均是多核环境下的执行结果

代码说明:在主线程里创建一个函数线程,主线程和函数线程中各写一个循环分别打印。主线程打印完调用函数pthread_join()用来等待函数线程的完成,等函数线程完成后再结束进程(否则可能主线程完成任务后,函数线程还没开始执行,主线程就结束了进程)。

此时运行结果如下:

接下来加入信号量的函数,实现两个线程的交替打印,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<semaphore.h>
#include<pthread.h>

sem_t sem;//定义全局变量

void* fun(void* arg)
{
	printf("fun thread start\n");

	int i=0;
	for(;i<5;i++)
	{
		sem_wait(&sem);//相当于P操作
		sleep(1);//只是表示循环内部需要执行时间的长短(假设循环内有很多内容,需要执行1s)
		printf("fun thread running\n");
		sem_post(&sem);//相当于V操作
	}

	printf("fun thread end\n");

	return NULL;
}
int main()
{
	pthread_t id;
	int res=pthread_create(&id,NULL,fun,NULL);//创建线程
	assert(res==0);//断言线程创建成功

	int n=sem_init(&sem,0,1);//对信号量进行初始化
	assert(n==0);//断言信号量初始化成功

	printf("main thread start\n&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值