pthreads不适用于多核系统

时间:2013-02-21 00:08:31

标签: c++ pthreads multicore

我有一个使用pthreads,mutex等运行POSIX的系统。当我在运行Linux的单个处理器的PC上运行它时,程序运行正常,但是当我在多核系统上运行它时,程序只会创建第一个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 ); 

同样,当我在PC中执行此代码时工作正常,但在这个多核系统上,它只是创建第一个线程并休眠。

还有一件事,主要过程是:

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 个答案:

没有答案