Pthreads не работают в многоядерной системе

У меня есть система, работающая с POSIX, использующая pthreads, mutex и т. Д. Когда я запускаю ее на ПК с одним процессором под управлением Linux, программа работает нормально, но когда я запускаю ее в многоядерной системе, программа просто создает первый pthread и перестает работать ,

Я использую эти параметры для компиляции.

CCINCDIR=
CCLIBDIR=
CCLIBS=-lpthread -ldl
CCC=g++
CCDEFINES=-DUNIX
CCFLAGS=-Wall -g
DYNAMIC  = -rdynamic

Способ создания потока:

int s = pthread_create( &xThreadId, NULL, func, arg);
if (s != 0)
throw EXCEPT_NOTHREAD;
pthread_detach( xThreadId );

Опять же, когда я выполняю этот код на ПК, он работает нормально, но в этой многоядерной системе он просто создает первый поток и спит.

Еще одна вещь, основной процесс заключается в следующем:

GameEvent * pGE = new GameEvent;
pGE->Set( REFEVT_GUI_NEWGAME );
Ref.PostMsg( pGE ); //run all the process and create threads
ThreadSleep();  // i commented this and still is not working. I tried with sleep and the same is not working.

Система использует gcc.4.4.

Любые идеи, которые должны быть проблемой, или мне нужно использовать другие параметры компиляции, чтобы запустить более одного потока, или установить переменную. Я не претендую на использование MPI, просто для запуска pthreads.

Я хочу добавить след того, что происходит с мьютексом, семафорами; он пытается освободить один и тот же мьютекс два раза, и программа останавливается на этом, но после некоторых компиляций теперь не пытается два раза освободить один и тот же мьютекс, но все равно прекращает работать после последнего освобождения мьютекса:

[New Thread 0xfffb58ff1f0 (LWP 27922)]
-1211557376 : Created thread -1248857616 at 0x1005ac08(0xfffffffeb60)
-1211557376 : Waiting for mutex 0x100621a0 - owner 0
-1211557376 : Got mutex 0x100621a0
-1248857616 : Waiting for sem 0x100629b0 - val 0
-1211557376 : Incremented sem 0x100629b0 - val 1
-1211557376 : Releasing mutex 0x100621a0
-1248857616 : Got sem 0x100629b0 - val 0
-1248857616 : Waiting for mutex 0x100621a0 - owner 0
-1248857616 : Got mutex 0x100621a0
-1248857616 : Releasing mutex 0x100621a0

Некоторые идеи?

Подробнее об оборудовании:

Это разные машины. Единственное ядро ​​- Ubuntu. Многоядерный компьютер имеет много узлов и работает под управлением Linux SLES11 SP1 и ядра:

$ uname -a
Linux login21 2.6.32.54-0.3-ppc64 #1 SMP 2012-01-27 17:38:56 +0100 ppc64 ppc64 ppc64 GNU/Linux
$

0

Решение

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

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

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

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