问题是由于编译器的优化。上面所示的原始代码包括一些假时滞的for循环。只是的代码编译器的优化,导致一个超级快速新线程的执行。
新的简化代码所示包括一些有意义的加法和减法在for循环。
和预期结果显示每个线程的异步执行。
/ /这段代码使用printf“,我没有确认thread-safty Matlab。
/ /这段代码不使用互斥对象或其他并发编程工具。
/ /这段代码的唯一目的是表明c++ 11中可以使用
2013 / / Matlab与微软Visual Studio 2012中表达。
# include“mex.h”
int count_thread1 = 0;
int count_thread2 = 0;
空白hello ()
{
count_thread2 = 0;
为(int i = 0;< = 10000;我+ +){
为(int j = 1; < = 20000; j + +) {
count_thread2 = i-j-1;
}
count_thread2 + +;
printf (“2:% d % d \ n”、count_thread1 count_thread2);/ /不确定如果在Matlab printf是线程安全的。但在这个特殊的例子
}
}
空白mexFunction (int nlhs mxArray
*
plhs [], int nrhs const mxArray * prhs [])
{
count_thread1 = 0;
std::线程t(你好);
为(int i = 1;我+ +)< = 10000;
{
为(int j = 1; < = 20000; j + +) {
count_thread1 =我+ j - 1;
}
count_thread1 + +;
mexPrintf (“1:% d % d \ n”、count_thread1 count_thread2);
}
mexPrintf (“\ n”);
t.join ();
mexPrintf (“\ n”);
}
输出:
2:10744、-10033
1:10743、-10033
2:10743、-10032
2:10742、-10031
2:10742、-10030
1:10742、-10032
2:10742、-10029
2:10741、-10028
2:10741、-10027
2:10741、-10026
1:10741、-10029
2:10741、-10025
1:10740、-10025
.......................
2:10718、-10002
1:10717、-10002
2:10717、-10001
1:10716、-10001
2:10716、-10000
1:10715、-10000
1:10714、-10000
1:10713、-10000