|
我用的ACE版本为5.6的,我ARM上裁减的为2.6的内核.我的应用程序在编译后,在X86的Linux环境下运行无问题,但是移植到ARM上后,一运行到release()处,则被阻塞.不知道什么原因,望高手帮忙解决下....谢谢哈.附代码如下
PS:先猜测几种出错的可能:
1.应用程序上的错误.
2.ace库在移植后的错误.
3.交叉编译环境的错误.
4.arm上操作系统的错误.
望各位高手帮忙分析下...
#include "ace/Synch.h"
#include "ace/Thread_Manager.h"
#include "ace/OS.h"
class CTest_Semaphore
{
public:
CTest_Semaphore() : sp_data(0)
{
bisstop = false;
bisexit = false;
}
~CTest_Semaphore()
{
}
static int worker(void* p)
{
CTest_Semaphore* lp = (CTest_Semaphore*)p;
while (!lp->bisexit)
{
if (!lp->bisstop)
{
printf("I am worker !\n");
lp->sp_data.release(); // 运行在这里被阻塞.......
}
ACE_OS::sleep(1);
}
return 0;
}
static int consumer(void* p)
{
CTest_Semaphore* lp = (CTest_Semaphore*)p;
while(!lp->bisexit)
{
lp->sp_data.acquire();
printf("I am consumer !\n");
}
return 0;
}
void open()
{
ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)worker, this);
ACE_Thread_Manager::instance()->spawn((ACE_THR_FUNC)consumer, this);
}
void close()
{
ACE_Thread_Manager::instance()->wait();
}
public:
bool bisstop;
bool bisexit;
ACE_Thread_Semaphore sp_data;
};
int ACE_TMAIN(int argc, char* argv[])
{
CTest_Semaphore cts;
cts.open();
while(1)
{
char ch = getchar();
if (ch == 'q')
{
cts.bisexit = true;
cts.sp_data.release();
break;
}
else if (ch == 's')
{
cts.bisstop = !cts.bisstop;
}
}
cts.close();
return 0;
}
[ 本帖最后由 mao1278 于 2009-3-4 14:34 编辑 ] |
|