在通过inherited调用tobject.create后,第一句就是调用一个过程:addthread,其源码如下:
procedure addthread;
begin
interlockedincrement(threadcount);
end;
同样有一个对应的removethread:
procedure removethread;
begin
interlockeddecrement(threadcount);
end;
它们的功能很简单,就是通过增减一个全局变量来统计进程中的线程数。只是这里用于增减变量的并不是常用的inc/dec过程,而是用了interlockedincrement/interlockeddecrement这一对过程,它们实现的功能完全一样,都是对变量加一或减一。但它们有一个最大的区别,那就是interlockedincrement/interlockeddecrement是线程安全的。即它们在多线程下能保证执行结果正确,而inc/dec不能。或者按操作系统理论中的术语来说,这是一对“原语”操作。
以加一为例来说明二者实现细节上的不同:
一般来说,对内存数据加一的操作分解以后有三个步骤:
1、 从内存中读出数据