Chinaunix首页 | 论坛 | 博客
  • 博客访问: 181850
  • 博文数量: 88
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 914
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-10 13:41
文章分类

全部博文(88)

文章存档

2010年(2)

2009年(35)

2008年(51)

我的朋友

分类: Python/Ruby

2008-04-18 00:16:38

摘自:http://blog.niwota.com/rss/woblog

C++线程中嵌入python,线程并不是安全的,需要锁机制保证线程安全,我试了2种锁机制,一种是C++线程Mutex锁,另一种是python本身的线程锁
1、C++线程Mutex锁:

加锁的Code
#ifdef WIN32
 EnterCriticalSection((CRITICAL_SECTION *)_mutex);
#else
 pthread_mutex_lock(&_mutex);
#endif

解锁的Code
#ifdef WIN32
 LeaveCriticalSection((CRITICAL_SECTION *)_mutex);
#else
 pthread_mutex_unlock(&_mutex);
#endif

2、python本身的线程锁机制
    PyEval_InitThreads();
    mainThreadState = PyThreadState_Get();
    mainInterpreterState = mainThreadState->interp;
    myThreadState = PyThreadState_New(mainInterpreterState);
    PyEval_ReleaseLock();
    PyEval_AcquireLock();
    tempState = PyThreadState_Swap(myThreadState);
    
    //TODO:在这儿加入调用Python函数的代码   

    PyThreadState_Swap(tempState);
    PyEval_ReleaseLock();
    PyThreadState_Clear(myThreadState);
    PyThreadState_Delete(myThreadState);

3、对上面2种线程锁机制多次测试结果:
3.1 先把锁机制代码注销,多次测试后,程序崩溃,调试core文件,崩溃原因跟python有关
3.2 使用Mutex锁,多次测试,程序稳定,未出现崩溃
3.3 使用Python本身的线程锁机制,程序稳定,未出现崩溃
另多次实验,发现相同的测试程序在linux上运行速度比Windows快不少。
阅读(1447) | 评论(2) | 转发(0) |
0

上一篇:java gcj调试

下一篇:互斥问题

给主人留下些什么吧!~~

哈雷斯托2019-06-23 17:21:59

chinaunix网友:非常不错 找了很久 终于解决了 谢谢

请问这里的mainThreadState不需要定义吗

回复 | 举报

chinaunix网友2009-12-29 21:07:03

非常不错 找了很久 终于解决了 谢谢