求高手,google 面试题,多线程,mutex

rzphenix 2008-05-15 12:00:14
有四个线程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 多线程同步 下的解法
...全文
437 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rnnr0711 2009-02-22
  • 打赏
  • 举报
回复
ding
smzgl 2008-05-29
  • 打赏
  • 举报
回复
不考虑非要用多线程同步的话,可以分别先获取4个文件的大小,根据文件大小获取一共有几个1,几个2,几个3,几个4,然后……

非要用的话,可以当作消费者生产者来处理。一个或者四个生产者,然后4种(注意,不是4个),每种一个的消费者
fuqd273 2008-05-19
  • 打赏
  • 举报
回复
两种写法,供参考。
第一种:
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来记录初始状态,以保证执行顺序,避免死锁发生。
威廉-丁 2008-05-19
  • 打赏
  • 举报
回复
顶一下
嵌云阁主 2008-05-15
  • 打赏
  • 举报
回复
为每个文件都设置一个锁是否会快些?
chenzhixin 2008-05-15
  • 打赏
  • 举报
回复
4个线程操作同一个变量,用互斥锁,1线程直接求余,然后++,2,3,4线程只在变量基础上加1-3再求余。
4个线程的运行顺序问题可以考虑线程的优先级别
威廉-丁 2008-05-15
  • 打赏
  • 举报
回复
关注中
老腊肉泡酒 2008-05-15
  • 打赏
  • 举报
回复
有思路,可能我想得太简单了吧。
daidodo 2008-05-15
  • 打赏
  • 举报
回复
全局变量:计数器i,和四个文件fd数组
单独线程定时增加i,比如每1秒加1,然后用condition通知1,2,3,4号线程;
1,2,3,4号线程根据当前的得到通知后,对计算(i % 4) + 自己的编号,然后再对应文件fd里写入自己的编号。
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。 目 录 第1部分C++ 多线程系统编程 第1章线程安全的对象生命期管理3 1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4 1.1.3一个线程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4 1.2对象的创建很简单. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5 1.3销毁太难. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7 1.3.1mutex 不是办法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7 1.3.2作为数据成员的mutex 不能保护析构.. . . . . . . . . . . . . . 8 1.4线程安全的Observer 有多难.. . . . . . . . . . . . . . . . . . . . . . . . 8 1.5原始指针有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11 1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13 1.7插曲:系统地避免各种指针错误. . . . . . . . . . . . . . . . .. . . . . . 14 1.8应用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17 1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19 1.11对象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21 1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23 1.11.2弱回调. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24 1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26 1.13心得与小结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26 1.14Observer 之谬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 第2章线程同步精要 2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.1.1只使用非递归的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33 2.1.2死锁. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35 2.2条件变量(condition variable). . . . . . . . . .

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧