作者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/m.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