我一直在想,在某些东西是自动线程安全之前你必须要做的事情有多深?
快速举例:
int dat = 0; void SetInt(int data) { dat = data; }
..这种方法会被视为线程安全吗?为了确定,我通常将所有的设置方法都包含在互斥锁中,但每次我这样做时,我都忍不住认为这是一个无用的性能开销.我想这一切都分解为编译器生成的程序集?什么时候线程能够闯入代码?每个汇编指令还是每个代码行?在设置或销毁方法堆栈期间线程是否可以中断?像i ++这样的指令是否会被认为是线程安全的 - 如果不是,那么++ i呢?
Lotsa在这里提问 - 而且我不希望直接回答,但关于这个主题的一些信息会很棒:)
[更新]因为现在对我来说很明显(对你们这些人来说<3),在线程中唯一原子保护的东西是汇编指令,我知道这个问题:互斥和信号量包装类怎么样?像这样的类通常使用制作callstacks的方法 - 而且通常使用某种内部计数器的自定义semaphoreclasses不能保证原子/线程安全(无论你想要什么,只要你知道我的意思,我不在乎: P)