使用全局变量进行通信
对于标准型的全局变量,建议使用volatile修饰符,告诉编译器无需优化(不放入寄存器),该值可以被外部改变。
如果线程间需要传递的信息比较复杂,可以使用结构,通过传递指向结构的指针来传递信息。
volatile修饰符
-
防止编译器优化
声明为volatile的变量不会被编译器优化,每次访问都会直接读取内存值,避免因优化导致的数据不一致问题。 12 -
保证内存可见性
在多线程环境中,volatile变量的修改会立即同步到主内存,其他线程能读取到最新值,解决线程间数据不一致问题。 34 -
禁止指令重排序
通过插入内存屏障,防止编译器或处理器对volatile变量相关指令进行重排序,确保程序执行顺序符合预期。
如链接示例中
volatile bool bExit1 = false;
volatile bool bExit2 = false;
...
void CMFCApplDlg::OnPriorityThread1()
{
int prior;
//线程存在
if (m_pThread1 && !bExit1)
{
prior = m_pThread1->GetThreadPriority();
if (prior == THREAD_PRIORITY_NORMAL )
{
m_pTh


5万+

被折叠的 条评论
为什么被折叠?



