当前位置:网站首页>IO线程进程->线程同步互斥机制->day6
IO线程进程->线程同步互斥机制->day6
2022-08-03 21:13:00 【鲸叫我照顾海QAQ】
目录
作业
1.编写一个程序,开启3个 线程,这3个线程的ID分别为ABC,每个线程将自己的ID在屏幕上打印10 遍,要求输出结果必须按ABC的顺序显示,如ABCABC……依次递推;
一、按顺序打印
1.1 函数
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
int flag=0;
pthread_mutex_t mutex;
pthread_cond_t cond;
pthread_t tid1,tid2,tid3;
void* A(void *arg)
{
int i=0;
while(i<10)
{
pthread_mutex_lock(&mutex);
if(0 != flag)
{
pthread_cond_wait(&cond,&mutex);
}else
{
flag=1;
printf("A");
i++;
}
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* B(void* arg)
{
int i=0;
while(i<10)
{
pthread_mutex_lock(&mutex);
if(1 != flag)
{
pthread_cond_wait(&cond,&mutex);
}else
{
flag=2;
printf("B");
i++;
}
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* C(void* arg)
{
int i=0;
while(i<10)
{
pthread_mutex_lock(&mutex);
if(2 !=flag)
{
pthread_cond_wait(&cond,&mutex);
}else
{
flag=0;
printf("C\n");
i++;
}
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
if(pthread_mutex_init(&mutex,NULL) !=0)
{
perror("pthread_mutex_init");
return -1;
}
if(pthread_cond_init(&cond,NULL) != 0)
{
perror("pthread_cond_init");
return -1;
}
if(pthread_create(&tid1,NULL,A,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid2,NULL,B,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid3,NULL,C,NULL) != 0)
{
perror("pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
pthread_mutex_destroy(&mutex);
printf("\n");
return 0;
}//今天裂开了,不想写注释了,。。。。。。
2.2 执行结果
二、倒置字符串
2.1 函数
#include <stdio.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>
char str[]="123456";
int flag=0;
pthread_mutex_t mutex;
pthread_cond_t cond;
pthread_t tid1,tid2;
void* dayin(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
if(1 != flag)
{
pthread_cond_wait(&cond,&mutex);
}
int len=strlen(str);
char temp;
for(int i=0;i<len/2;i++)
{
temp=str[i];
str[i]=str[len-1-i];
str[len-1-i]=temp;
}
flag=0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void* daizhi(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex);
if(0 != flag)
{
pthread_cond_wait(&cond,&mutex);
}
printf("%s\n",str);
flag=1;
sleep(1);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
if(pthread_mutex_init(&mutex,NULL) !=0)
{
perror("pthread_mutex_init");
return -1;
}
if(pthread_cond_init(&cond,NULL) != 0)
{
perror("pthread_cond_init");
return -1;
}
if(pthread_create(&tid1,NULL,dayin,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid2,NULL,daizhi,NULL) != 0)
{
perror("pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
2.2 执行结果
边栏推荐
- 软考系统分析师备考经验分享:论持久战
- 回忆三年浮沉
- [kali-vulnerability exploitation] (3.2) Metasploit basics (on): basic knowledge
- 微信小程序 生成跳转体验版url,可直接跳转到体验版小程序(可通过此方法测试模板消息)
- dataframe 多层索引 更换索引 df.swaplevel(axis=1)
- Soft exam system analysts note experience sharing: theory of protracted war
- tidyverse based on data.table?
- idea2021.1.3版本如何启动多个客户端程序
- gtk实现图片旋转
- 在树莓派上搭建属于自己的网页(4)
猜你喜欢
数据库定时备份winserver2012篇
[kali-vulnerability scanning] (2.1) Nessus download and installation (on)
太香了! 阿里 Redis 速成笔记, 从头到尾全是精华!
XSS线上靶场---Warmups
Cesium 修改鼠标样式
nxp官方uboot移植到野火开发板PRO(修改LCD部分和网络部分)
【kali-漏洞扫描】(2.1)Nessus解除IP限制、扫描快无结果、插件plugins被删除(中)
LitJson报错记录
15 years experience in software architect summary: in the field of ML, tread beginners, five hole
PyCharm函数自动添加注释无参数问题
随机推荐
chart.js多条曲线图插件
buildscript和allprojects的作用和区别是什么?
从开发到软件测试:除了扎实的测试基础,还有哪些必须掌握 ?
AWTK开发编译环境踩坑记录1(编译提示powershell.exe出错)
461. 汉明距离
XSS online shooting range---Warmups
XSS漏洞复现
解决This application failed to start because no Qt platform plugin could be initialized的办法
nxp官方uboot移植到野火开发板PRO(修改LCD部分和网络部分)
直播小程序源码,UI自动化中获取登录验证码
通关剑指 Offer——剑指 Offer II 009. 乘积小于 K 的子数组
XSS测试
LitJson报错记录
开源一夏 |如何优化线上服务器
STP生成树
软考系统分析师备考经验分享:论持久战
模板字符串
LyScript 实现应用层钩子扫描器
MMA安装及使用优化
ValidationError: Progress Plugin Invalid Options