处理器可以自由重新排序此代码
internal static volatile int s_x = 0;
internal static volatile int s_y = 0;
internal static volatile int s_ya = 0;
void ThreadA() {
s_x = 1;
s_ya = s_y;
}
我担心是否可以重新排序任何代码,并且我知道如何识别可重新排序的代码。特别关于我的代码:
Processing.Add(ItemNumber, null);
AsyncTask.Begin(InternalRequestCallback, Remove, ItemNumber);
必须按指定顺序发生,否则失败。我应该放一个Thread.MemoryBarrier();这些陈述之间?
答案 0 :(得分:3)
简短版本:没有。
你的代码只执行两次调用;运行时保证这些方法将按顺序执行(至少在单个线程上)。
本文的复杂性集中在 2 线程访问共享状态的复杂性(您需要ThreadB
方法才能使示例有意义)。您粘贴的代码是,我很确定,不可重新订购 - 尤其是因为这是同一线程上的连续指令(依赖数据)。
你需要比我理解的更深入了解全部细节。但除非你使用无锁,线程编程做一些复杂的事情,否则你不太可能咬你。