关于mutex和任务分配器的问题
问题1:关于mutex的使用
要实现互斥是否多个有可能存在竞争问题的线程得共享使用同一把锁? 如果设计一个线程类,每个类中含有一个私有互斥锁,对竞争关系代码加锁的时候都用自己那把,还能达到互斥的目的吗?还是说,互斥锁是全局作用的(全局的话,作用范围是多少?整个操作系统?会话?进程?),和锁变量是否有多个没有关系?...绕来绕去不知道有没有说清楚问题 = =||。
问题2:关于任务分配器的设计
任务来自web,用户提交请求并由web server放入数据库,任务处理机包含一个服务器和多个客户端,由服务端保持和数据库通信并将任务信息收集起来分发给任务处理终端。
我是这样想的,分配器可以通过轮询数据库或者由web server进行通知两种方式保持实时性,但考虑到web server可能存在短时间存在大量任务请求的状况,一个任务建一次连接那请求队列大概很快就排不下了,或者定时(1s)发送一次,但这样web server压力就会变大,而且还要处理异常情况导致的数据混乱问题。所以打算由分配器进行定时轮询(sleep(1))数据库。
处理机终端不断向分配器发送GET_TASK请求,服务器维护一个任务队列,不为空的时候才发任务过去。由于是异步I/O,但我希望没有任务的时候可以阻塞和客户端通信的线程,所以打算用一个信号量来实现一个生产者——消费者模型。
我的问题是觉得充满mutex和semaphore的代码看着觉得十分诡异,显得复杂了,程序流越来越难搞清,我是在linux上写的,gdb的多线程调试也不太会。因为第一次写这种东西,基本上完全凭感觉来写了,希望高手们能提供意见,你们一般是怎么做的,闭门造车就没意思了。