加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 我可以嵌套关键部分吗? TCriticalSection是否可嵌套

发布时间:2020-12-15 09:06:25 所属栏目:大数据 来源:网络整理
导读:我希望有两个程序可以相互调用,或者从运行的任何线程调用,但一次只运行一个.我怎样才能做到这一点?这会正常吗? var cs: TCriticalSection;procedure a;begin cs.Acquire; try // Execute single threaded here. finally cs.Release; end;end;procedure b;b
我希望有两个程序可以相互调用,或者从运行的任何线程调用,但一次只运行一个.我怎样才能做到这一点?这会正常吗?

var
  cs: TCriticalSection;

procedure a;
begin
  cs.Acquire;
  try
    // Execute single threaded here. 
  finally
    cs.Release;
  end;
end;

procedure b;
begin
  cs.Acquire;
  try
    // Execute single threaded here. Maybe with calls to procedure a.
  finally
    cs.Release;
  end;
end;

解决方法

是的,那会有效.过程A可以在同一个线程中调用B,反之亦然,当线程A使用过程A或B时,线程B必须等待它想要使用这些过程.

请参阅有关关键部分的MSDN文档:http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx

关键部分可以嵌套,但是每次调用Acquire都必须调用Release.因为您在try .. finally子句中进行了Release调用,所以确保发生这种情况,因此您的代码很好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读