在多线程应用程序中。有没有办法通过编程让线程B检查A A当前所在的函数?
发布于 2009-02-09 18:25:46
您可以通过执行以下操作来获取另一个线程的堆栈跟踪:
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(myThread);从这里你可以得到调用堆栈,以及它当前正在执行的函数。
发布于 2009-05-22 07:41:09
这是应该内置到应用程序本身中的东西,以避免线程之间可能的争用。
在我看来,一个线程永远不应该控制另一个线程的执行(例如,挂起/恢复),除非启动它。它们应该只建议另一个线程控制自己(例如,使用互斥和事件)。这极大地简化了线程管理,并减少了竞争条件的可能性。
如果您真的想让线程B知道线程A当前正在做什么,那么线程A应该使用一个带有函数名的受互斥锁保护的字符串将其传递给线程B(或任何其他线程,例如下面的主线程)。类似于(伪代码)的东西:
global string threadAFunc = ""
global mutex mutexA
global boolean stopA
function main:
stopA = false
init mutexA
start threadA
do until 20 minutes have passed:
claim mutexA
print "Thread A currently in " + threadAFunc
release mutexA
stopA = true
join threadA
returnfunction threadA:
string oldThreadAFunc = threadAFunc
claim mutexA
threadAFunc = "threadA"
release mutexA
while not stopA:
threadASub
claim mutexA
threadAFunc = oldThreadAFunc
release mutexA
return
function threadASub:
string oldThreadAFunc = threadAFunc
claim mutexA
threadAFunc = "threadASub"
release mutexA
// Do something here.
claim mutexA
threadAFunc = oldThreadAFunc
release mutexA
return该方法可以在任何支持线程的语言或环境中使用,而不仅仅是.Net或C#。线程A中的每个函数都有prolog和epilog代码来保存、设置和恢复其他线程中使用的值。
https://stackoverflow.com/questions/529249
复制相似问题