作者mingcloud (逆宇)
看板C_and_CPP
标题[问题] MSDN multi-thread问题
时间Tue Jul 18 23:44:46 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
VS2010
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
WINAPI
问题(Question):
小弟正在开发一个simulator
利用multithread模仿interrupt的行为
也就是原本的threadA执行到一半的时候
假设这时候硬体来了一个interrupt
就把原本的thread hold住
然後执行interrupt的对应动作
等执行完再让原本的THREADA继续往下跑
有看到网路上大部分人不太推荐使用WINAPI的suspendthread
比较建议在threadA找地方加入waitsingleobject
等object抓到後在枉下跑
但因种种原因 这个方法不被采纳
想要请教各位大大
这种windows模仿interrupt的行为
除了suspendthread还有别的方法吗?
或者是有办法解决suspendthread的block issue吗?
小弟原本有考虑过使用WINDOWS的signal
但是查了一下windows的signal好像没有像linux可以support到打给特定的thread
感觉起来他只能by process来送
这样应该只有MAIN THREAD会收到???(因为我的case里 mainthread !-= threadA)
喂入的资料(Input):
None
预期的正确结果(Expected Output):
no deadlock
错误结果(Wrong Output):
stuck at suspendthread
程式码(Code):(请善用置底文网页, 记得排版)
http://codepad.org/xAA3ME1T
补充说明(Supplement):
程式码的部分比较阳春
因为ISR 跟原本要做的事情很复杂
我就把他简单带过了
重点在於要怎麽模仿出让特定thread卡住 然後直接执行另外一段程式码的部分
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.167.127.32
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1500392689.A.8B3.html
1F:→ hichcock: 可以描述一下 "种种原因" 吗 07/19 08:28
2F:→ TeaEEE: 让原本运行中的thread暂停不就失去multi的目的吗 07/19 08:36
3F:→ mingcloud: 因爲这是模仿single thread程式跑在特定hw的simulation 07/19 10:39
4F:→ mingcloud: … 07/19 10:39
5F:→ mingcloud: 所以我们想要尽量跟原本的状况是相似的 07/19 10:40
6F:→ mingcloud: 这也是爲什麽我们需要让原本thread暂停的原因 07/19 10:41
7F:→ hichcock: 要模拟, 那你要先描述他本来的行为方式呀 07/19 16:58
8F:推 cgp218: 用同步控制即可 07/19 22:39
9F:→ mingcloud: 请问要怎麽使用呢 07/20 11:17
10F:推 loveflames: pthread_cond_wait/pthread_cond_signal 07/20 12:25
11F:推 shibin: Windows API, 可以用AutoResetEvent或ManualResetEvent 07/24 19:58