多线程问题求助
是这样的
我有一个主线程A和两个主线程创建的子线程1,2,还有两个队列1和2,队列1是常规的一些内容,队列2是临时的一些内容。
要求主线程监听一个端口,如果没有消息的话,则正常启动线程1,线程1从队列1中取单元操作;
如果有消息的话则放入队列2,暂停线程1,启动线程2,线程2从队列2中取单元操作。等队列2取空了则恢复线程1.
求教应该怎么用线程互斥或者同步来完成,求伪代码,我在waitforsingleobject这儿看的有点乱,诚心求教。
[解决办法]
看需求,应该是主线程启动1,2线程并挂起2号线程。当有数据来时,挂起1号线程,恢复2号线程,当2号线程取空队列时,恢复1号线程并挂起自己。
主要就是用
SuspendThread
ResumeThread
这两函数。
[解决办法]
问题1,运行线程2时为何要挂起线程1?1,2之间有何冲突?
问题2,主线程除了监听端口,往队列2里放数据外还干其他什么事没?
问题3,数据到达是否频繁,线程2处理数据是否需要消耗大量时间?
按你的描述,个人觉得线程2和主线程可以合并。大致就是
- C/C++ code
主线程:起线程1while(1){ 等待数据到达 挂起线程1 处理到达的数据(原线程2的工作) 恢复线程1}线程1没什么需要同步的地方。
[解决办法]
楼主肯定是不知道条件变量这个东西,线程在进程启动后全部跑起来然后挂在条件变量上等待即可,去了解一下.
[解决办法]
[解决办法]
虽然不知道楼主这样想干嘛,最简单的就是线性传递数据就是了:
主线程-->线程1-->线程2
队列1+锁1+条件1, 线程1加锁1检查队列1,非空就取出来加锁2存入队列2(队列2空则唤醒条件2). 空就挂在条件1上等待.
队列2+锁2+条件2, 线程2加锁2检查队列2,非空就取出来(队列1满则唤醒条件1). 空就挂在条件2上等待.
如果楼主是想做成双缓冲队列那种目的的话,是不需要2个子线程的.
主线程加锁1,存入队列1,如果队列1满则失败,如果队列1不满,则push队列1,并唤醒条件2.
线程1加锁2,检查队列2,队列2空则加锁1,检查队列1,队列1空则释放掉锁1,挂在条件2上等待主线程唤醒. 队列1非空,则转移队列1数据到队列2,放掉锁1,取走一个数据,放掉锁2. 如果队列2非空,则直接取走数据放掉锁2.
[解决办法]
1也是下载东西?
线程1监听端口1,接收数据
主线程(线程2)监听端口2,接收数据。
端口2是紧急数据,当端口2有数据时,不管端口1,而只收端口2。端口2没东西时,才收端口1。
如果是上面的意思,直接select不就行了。不需要起线程。