当前位置: 技术问答>linux和unix
求高手,google 面试题,多线程,mutex
来源: 互联网 发布时间:2016-05-06
本文导语: 有四个线程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...
有四个线程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....
设计程序.
求在linux 多线程同步 下的解法
现在有四个文件.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....
设计程序.
求在linux 多线程同步 下的解法
|
全局变量:计数器i,和四个文件fd数组
单独线程定时增加i,比如每1秒加1,然后用condition通知1,2,3,4号线程;
1,2,3,4号线程根据当前的得到通知后,对计算(i % 4) + 自己的编号,然后再对应文件fd里写入自己的编号。
单独线程定时增加i,比如每1秒加1,然后用condition通知1,2,3,4号线程;
1,2,3,4号线程根据当前的得到通知后,对计算(i % 4) + 自己的编号,然后再对应文件fd里写入自己的编号。
|
两种写法,供参考。
第一种:
A: 1
B:
C:
D:
-->
A: 1 2
B: 2
C:
D:
-->
A: 1 2 3
B: 2 3
C: 3
D:
-->
A: 1 2 3 4
B: 2 3 4
C: 3 4
D: 4
第二种:
A: 1
B: 2
C: 3
D: 4
-->
A: 1 2
B: 2 3
C: 3 4
D: 4 1
-->
A: 1 2 3
B: 2 3 4
C: 3 4 1
D: 4 1 2
-->
A: 1 2 3 4
B: 2 3 4 1
C: 3 4 1 2
D: 4 1 2 3
都能实现,主要问题是,要通过 多线程同步来做。
具体又分成1个线程锁,以及多个线程锁。
多个线程锁的情况,需要单独的flag来记录初始状态,以保证执行顺序,避免死锁发生。
第一种:
A: 1
B:
C:
D:
-->
A: 1 2
B: 2
C:
D:
-->
A: 1 2 3
B: 2 3
C: 3
D:
-->
A: 1 2 3 4
B: 2 3 4
C: 3 4
D: 4
第二种:
A: 1
B: 2
C: 3
D: 4
-->
A: 1 2
B: 2 3
C: 3 4
D: 4 1
-->
A: 1 2 3
B: 2 3 4
C: 3 4 1
D: 4 1 2
-->
A: 1 2 3 4
B: 2 3 4 1
C: 3 4 1 2
D: 4 1 2 3
都能实现,主要问题是,要通过 多线程同步来做。
具体又分成1个线程锁,以及多个线程锁。
多个线程锁的情况,需要单独的flag来记录初始状态,以保证执行顺序,避免死锁发生。
|
4个线程操作同一个变量,用互斥锁,1线程直接求余,然后++,2,3,4线程只在变量基础上加1-3再求余。
4个线程的运行顺序问题可以考虑线程的优先级别
4个线程的运行顺序问题可以考虑线程的优先级别