首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#函数意识?

C#函数意识?
EN

Stack Overflow用户
提问于 2009-02-09 18:22:15
回答 2查看 262关注 0票数 4

在多线程应用程序中。有没有办法通过编程让线程B检查A A当前所在的函数?

EN

回答 2

Stack Overflow用户

发布于 2009-02-09 18:25:46

您可以通过执行以下操作来获取另一个线程的堆栈跟踪:

代码语言:javascript
复制
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(myThread);

从这里你可以得到调用堆栈,以及它当前正在执行的函数。

票数 5
EN

Stack Overflow用户

发布于 2009-05-22 07:41:09

这是应该内置到应用程序本身中的东西,以避免线程之间可能的争用。

在我看来,一个线程永远不应该控制另一个线程的执行(例如,挂起/恢复),除非启动它。它们应该只建议另一个线程控制自己(例如,使用互斥和事件)。这极大地简化了线程管理,并减少了竞争条件的可能性。

如果您真的想让线程B知道线程A当前正在做什么,那么线程A应该使用一个带有函数名的受互斥锁保护的字符串将其传递给线程B(或任何其他线程,例如下面的主线程)。类似于(伪代码)的东西:

代码语言:javascript
复制
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
    return
代码语言:javascript
复制
function 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代码来保存、设置和恢复其他线程中使用的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/529249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档