首页 > 编程知识 正文

python多线程编程,把jk触发器变成T触发器的方法

时间:2023-05-05 21:05:53 阅读:116925 作者:2574

在《多线程编程之数据访问互斥》的报道中简单介绍了原子链,现在详细说明原子链的概念和用途。

(1)简单数据操作

如果要在多线程环境中对变量执行简单的数学或逻辑运算,则必须使用原子锁定操作。 因为使用线程独占方法(如临界空间、独占量等)会涉及许多操作系统调用和函数调用,而且效率不如原子操作那么高。 例如,有这样一个例子:

未指定的int count=0; intdata_process (

{if(/*conditions )/) }{

电子商务(cs; 出局;

leavecriticalsection(cs;

}

}

这里只有简单的数学操作。 可以应用操作系统提供的原子操作来代替,效率相当高。

未指定的int count=0; intdata_process (

{if(/*conditions )/) }{

联锁增量(计数;

}

}

)2)代码段中的互斥

还是以临界区域为例,例如在代码段中应用了以下临界区域:

voiddata_process (

{

电子商务(cs;

do_something (;

leavecriticalsection(cs;

}

这里也可以利用原子链代替临界区域,实现方法如下。

未指定锁定=0; voiddata_process (

{ while (1==交互式加密交换(lock,1,0 );

do_something (; 锁定=0;

}

InterLockedCompareExchange方法的含义是将第一个参数的值与第三个参数的值进行比较,如果相等则交换第二个参数的值,如果不相等则不操作。 返回值是第一个参数的初始值,此函数执行的操作是原子操作,适用于所有CPU,而不会被多线程中断。

上述代码意味着不断监视lock的值。 如果lock的值为0,则InterLockedCompareExchange将其更改为1,执行do_something (,最后将lock恢复为0。 当然,如果此时lock为1,则此while循环会不断运行(“忙等”)。

其实说到这里,你就会发现这里有问题。 如果另一个线程将lock设为1,执行需要很长时间,这里不是会发疯吗? 是的。 此原子锁定方法适用于对线程进行短时间操作的独占情况,而不是对所有系统的独占锁定调用的替代方法。 临界区在这个时候将显示出更大的优势。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。