C 启用禁用中断和线程安全

C 启用禁用中断和线程安全,c,thread-safety,interrupt,C,Thread Safety,Interrupt,在获得结果并将Post_位清除为其原始状态Post_位&=~Post之前禁用中断有什么意义;以及如果特定Post res=Post_位&Post;以前见过。 例如,如果在另一个函数上使用了Post_位,并且您正在此处对其进行更改,那么在禁用/启用中断中清除它是否会使其线程安全 BOOL Post_a_Note(Post_t Post) // Post_t is a 32bit number { Post_t res; //Final Result UINT16 capture =

在获得结果并将Post_位清除为其原始状态Post_位&=~Post之前禁用中断有什么意义;以及如果特定Post res=Post_位&Post;以前见过。 例如,如果在另一个函数上使用了Post_位,并且您正在此处对其进行更改,那么在禁用/启用中断中清除它是否会使其线程安全

BOOL Post_a_Note(Post_t Post) // Post_t is a 32bit number
{
    Post_t res; //Final Result
    UINT16 capture = INTDisableInterrupts(); 
    res    =  Post_Bits & Post; 
    Post_Bits &= (~Post); 
    INTRestoreInterrupts(capture); 
    return (res != 0); 
}

禁用中断是确保代码片段在任何时候只由一个线程执行的最简单方法

因为如果中断发生在第5行和第6行之间,并且设置了您正在检查的位,您将清除该位,但将其报告为未设置:因此丢失该事件。中断不是线程,线程安全是另一回事。