[問題] MSDN multi-thread問題

作者: mingcloud (逆宇)   2017-07-18 23:44:46
開發平台(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卡住 然後直接執行另外一段程式碼的部分
作者: hichcock (快樂一整年 ^^~~~)   2017-07-19 08:28:00
可以描述一下 "種種原因" 嗎
作者: TeaEEE (愛不趴 不愛趴)   2017-07-19 08:36:00
讓原本運行中的thread暫停不就失去multi的目的嗎
作者: mingcloud (逆宇)   2017-07-19 10:39:00
因爲這是模仿single thread程式跑在特定hw的simulation…所以我們想要盡量跟原本的狀況是相似的這也是爲什麼我們需要讓原本thread暫停的原因
作者: hichcock (快樂一整年 ^^~~~)   2017-07-19 16:58:00
要模擬, 那你要先描述他本來的行為方式呀
作者: cgp218 (allen)   2017-07-19 22:39:00
用同步控制即可
作者: mingcloud (逆宇)   2017-07-20 11:17:00
請問要怎麼使用呢
作者: loveflames (咕啾咕啾魔法陣)   2017-07-20 12:25:00
pthread_cond_wait/pthread_cond_signal
作者: shibin (喜餅)   2017-07-24 19:58:00
Windows API, 可以用AutoResetEvent或ManualResetEvent

Links booklink

Contact Us: admin [ a t ] ucptt.com