& Quot; Printf & Quot; кажется недетерминированным в Qt?

Я знаю, что «printf» является стандартным c и должен быть детерминированным. Но при запуске в Qt я вижу более недетерминированный ответ (тактовые циклы). Может ли это быть из-за того, что Qt добавил к ответу «свинину»?

У меня есть несколько потоков, которые делают вызов функции, которая использует мьютекс. Когда один поток входит, он устанавливает переключатель, чтобы другие не могли, пока это не будет сделано. Казалось, что все работает нормально в течение нескольких секунд, а затем кажется, что потоки были прерваны с 10 до 1 потока. Поэтому я попытался добавить задержку: (k = k + 1: без помощи), затем (зацикливание k = k + 1: без помощи), (работает usleep), и так (printf) работает над созданием случайной задержки и разрешением все потоки, чтобы продолжить работу.

void CCB::Write(int iThread)
{
static bool bUse = false;
bool bDone = false;
char cStr[20];
int posWrite;// = *m_posWrite;  // issue of posWrite be altered with next extrance
long k = 0;
long m = 0;
m_threadCount++;

while(bDone == false){

if(bUse == false){
bUse = true;
posWrite = *m_posWrite;

memcpy(m_cmMessageCB + posWrite, &m_cmMessageWrite, sizeof(typeCanMessage));

memset(cStr, '\0', 20);
memcpy(cStr, (m_cmMessageCB + posWrite)->cMessage, 11); //fails: every 20

*m_posWrite = *m_posWrite + 1;
if(*m_posWrite == m_iNBufferLength)
*m_posWrite = 0;

bDone = true;
bUse = false;

}else if(bUse == true){
//why are threads being killed ?
//            printf("T%d_%d ", iThread, m_threadCount);//non-deterministic value ?
usleep(1);//non-deterministic value
//k++;//delay of a couple clock cycles was not enough

/*
for(k = 0; k < iThread * 100; k++){//deterministic and fails to resolve thread problem
m++;
}
*/
}
}
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]