void setSyncFlag(int stage, Uint32 core, bool value)
{
CACHE_invL1d(&bSyncCores[0][0], sizeof(bool)*NUM_SYNC_STAGES*NUM_CORE, CACHE_WAIT);
bSyncCores[stage][core] = value;
CACHE_wbL1d (&bSyncCores[stage][core], sizeof(bool), CACHE_WAIT);
}
void waitSyncFlag(int stage, Uint32 core, bool value)
{
do
{
CACHE_invL1d(&bSyncCores[0][0], sizeof(bool)*NUM_SYNC_STAGES*NUM_CORE, CACHE_WAIT);
}while(bSyncCores[stage][core] != value);
//也试过下面这种方法
//while(bSyncCores[stage][core] != value)
//CACHE_invL1d(&bSyncCores[0][0], sizeof(bool)*NUM_SYNC_STAGES*NUM_CORE, CACHE_WAIT);
}
其中stage取值如下:
enum SYNC_STAGES {
SYNC_INIT = 0,
SYNC_INTEGRAL,
SYNC_DETECTION,
SYNC_MERGE_MARKS,
SYNC_MERGE_WINDOWS,
SYNC_CLASSIFY,
NUM_SYNC_STAGES
};
core取值从0到3,就是DNUM,value就是true或者false。
看起来可能是个cache之类的问题,在共享内存中的变量应该被设置正确了,但可能读取的时候没有得到正确值。