首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于mutex和任务分配器的有关问题

2013-09-10 
关于mutex和任务分配器的问题问题1:关于mutex的使用要实现互斥是否多个有可能存在竞争问题的线程得共享使

关于mutex和任务分配器的问题
问题1:关于mutex的使用
    要实现互斥是否多个有可能存在竞争问题的线程得共享使用同一把锁? 如果设计一个线程类,每个类中含有一个私有互斥锁,对竞争关系代码加锁的时候都用自己那把,还能达到互斥的目的吗?还是说,互斥锁是全局作用的(全局的话,作用范围是多少?整个操作系统?会话?进程?),和锁变量是否有多个没有关系?...绕来绕去不知道有没有说清楚问题 = =||。


问题2:关于任务分配器的设计
    任务来自web,用户提交请求并由web server放入数据库,任务处理机包含一个服务器和多个客户端,由服务端保持和数据库通信并将任务信息收集起来分发给任务处理终端。
    我是这样想的,分配器可以通过轮询数据库或者由web server进行通知两种方式保持实时性,但考虑到web server可能存在短时间存在大量任务请求的状况,一个任务建一次连接那请求队列大概很快就排不下了,或者定时(1s)发送一次,但这样web server压力就会变大,而且还要处理异常情况导致的数据混乱问题。所以打算由分配器进行定时轮询(sleep(1))数据库。
    处理机终端不断向分配器发送GET_TASK请求,服务器维护一个任务队列,不为空的时候才发任务过去。由于是异步I/O,但我希望没有任务的时候可以阻塞和客户端通信的线程,所以打算用一个信号量来实现一个生产者——消费者模型。

    我的问题是觉得充满mutex和semaphore的代码看着觉得十分诡异,显得复杂了,程序流越来越难搞清,我是在linux上写的,gdb的多线程调试也不太会。因为第一次写这种东西,基本上完全凭感觉来写了,希望高手们能提供意见,你们一般是怎么做的,闭门造车就没意思了。
[解决办法]
1、必须共享同一个mutex。如果是多个进程之间互斥,这个mutex本身还必须放入共享内存,设置进程间共享属性
[解决办法]
我没做过这样的东西,但是有个建议,楼主是不是可以采用逐步改进的方法做这个东西,先做出来,简单一点,不要信号量啥的,等功能测试通过之后,再添加同步机制,再添加信号量,最后测试大并发量,优化性能
[解决办法]
mutex和信号量都是多进程的,临界区是多线程,而多cpu就要用到tsl指令在保护内存。
他们都是对存在竞争的资源进行保护,防止同时访问的
对同样的资源,用同样的锁
[解决办法]
mutex可具名 不同进程使用同样名称创建的mutex在系统中是同一对象

热点排行