线程互斥量
来源:互联网 发布:歌词中的励志句子知乎 编辑:程序博客网 时间:2024/05/21 12:40
测试完成一道题
(google面试题)
有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推………现在有四个文件ABCD。初始都为空。现要让四个文件呈如下格式:
A:1 2 3 4 1 2….
B:2 3 4 1 2 3….
C:3 4 1 2 3 4….
D:4 1 2 3 4 1….
请设计程序。
#include <stdio.h>#include <pthread.h>#include <fcntl.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>struct pass_arg { int print_num; int file_descriptor[4];};pthread_mutex_t file_lock[4] = { PTHREAD_MUTEX_INITIALIZER, /* A file lock */ PTHREAD_MUTEX_INITIALIZER, /* B file lock */ PTHREAD_MUTEX_INITIALIZER, /* C file lock */ PTHREAD_MUTEX_INITIALIZER /* D file lock */};int who_write_file_flag[4] = { '1', '2', '3', '4'};int run = 1; /* thread run flag 0: stop, not 0 run */void *thread_body(void *arg){ int i; struct pass_arg *argument = (struct pass_arg *)arg; while (1) { if (run) { for (i=0; i<4; i++) { if (who_write_file_flag[i] == argument->print_num) { pthread_mutex_lock(&file_lock[i]); write(argument->file_descriptor[i], (const void *)&argument->print_num, 1); write(argument->file_descriptor[i], (const void *)" ", 1); who_write_file_flag[i] += 1; if (who_write_file_flag[i] == '5') who_write_file_flag[i] = '1'; pthread_mutex_unlock(&file_lock[i]); } } } } return (void *)0;}int main(void){ int fdA; int fdB; int fdC; int fdD; int i; pthread_t pthread_id[4]; fdA = open("A", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP); fdB = open("B", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP); fdC = open("C", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP); fdD = open("D", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP); struct pass_arg arg[4]; for (i=0; i<4; i++) { arg[i].print_num = i + '1'; arg[i].file_descriptor[0] = fdA; arg[i].file_descriptor[1] = fdB; arg[i].file_descriptor[2] = fdC; arg[i].file_descriptor[3] = fdD; } for (i=0; i<4; i++) { pthread_create(&pthread_id[i], NULL, thread_body, (void *)&arg[i]); } sleep(10); run = 0; /* stop thread */ sleep(2); close(fdA); close(fdB); close(fdC); close(fdD); return 0;}
可以完成。主线程没有判断子线程是否都退出,可以完善一下.
0 0
- 线程互斥量
- 线程6:互斥量,解决线程冲突
- 线程同步--使用互斥量
- 线程同步之互斥量
- 线程同步-互斥量
- 线程-互斥量mutex
- 互斥量,线程互斥
- 线程同步-互斥量
- POSIX线程中的互斥量
- 线程同步与互斥量
- unix练习-线程互斥量
- POSIX线程-互斥量
- 线程同步---互斥量mutex
- Linux线程同步---互斥量
- 线程同步 - 互斥量
- Linux线程同步------互斥量
- 线程同步--互斥量Mutex
- 线程同步(互斥量)
- Kafka文件存储机制那些事
- web课程设计——“四点IT”论坛
- C# 通过GET、POST请求获取结果
- POJ
- 页面左右两边跟随式广告框
- 线程互斥量
- 第三届蓝桥杯【省赛试题3】比酒量
- value和val()的区别
- MySQL 数据类型和数据表操作:查找插入记录
- 彻底解决访问谷歌、facebook、youtube等国外网站,上网无障碍
- 深度遍历
- 6.10、提取【extract】、与聚合【sum、aggregate、avg】
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- fir 和 iir的简单比较