procedure interlockedincrement( var avalue : integer );
begin
entercriticalsection( interlockedcrit );
inc( avalue );
leavecriticalsection( interlockedcrit );
end;
现在再来看前面那个例子:
1. 线程a进入临界区(假设数据为3)
2. 线程b进入临界区,因为a已经在临界区中,所以b被挂起
3. 线程a对数据加一(现在是4)
4. 线程a离开临界区,唤醒线程b(现在内存中的数据是4)