procedure proc1;
begin
  try
    EnterCriticalSection(vCritical);
    PushData(AStr);
  finally
    LeaveCriticalSection(vCritical);
  end;
end;procedure proc2;
begin
  try
    EnterCriticalSection(vCritical);
    PopData(AStr);
  finally
    LeaveCriticalSection(vCritical);
  end;
end;第一个线程正在执行proc1, 如果另外一个线程要执行proc2, 是否要等第一个线程执行完proc1才能进入运行proc2 ? 因为这两个函数使用了同一个临界变量.

解决方案 »

  1.   

    其实我要做的功能是多个线程并发push数据到一个队列中, 调用proc1,  然后只有一个线程负责从这个队列pop数据出来处理, 调用proc2, 想想不过做成两个函数还是不大合理, 可以做成一个proc, 通过参数来区分哪个线程是要push还是pop, 这样就可以通过一个临界变量来控制了.
      

  2.   

    procedure proc(type: string);
    begin
      try
      EnterCriticalSection(vCritical);
      if type = 'push' then
        PushData(AStr)
      else if type = 'pop' then
        PopData(AStr);
      finally
      LeaveCriticalSection(vCritical);
      end;
    end;