1.GIL与线程调度
Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(Global Interpreter Lock)来互斥线程对Python虚拟机的使用
为了支持多线程机制,一个基本的要求就是需要实现不同线程对共享资源访问的互斥,所以引入了GIL。
GIL:在一个线程拥有了解释器的访问权之后,其他的所有线程都必须等待它释放解释器的访问权,即使这些线程的下一条指令并不会互相影响。
在调用任何Python C API之前,要先获得GIL
GIL缺点:多处理器退化为单处理器;优...
分类:
编程语言 时间:
2014-06-25 19:48:52
阅读次数:
358
在实际的软件编程中,经常会遇到资源的争用,比如下面的例子:
[cpp]
view plaincopyprint?
class Counter { private: int value; public: Counter(int c) { value = c; }
int GetAndIncrement()
{ int temp = value;
//进入危险区 valu...
分类:
其他好文 时间:
2014-06-24 23:51:10
阅读次数:
400
1.多线程的安全隐患1.1>一块资源可能被多个线程共享,也就是多个线程可能会访问同一块资源,如多个线程访问同一个对象,变量,文件等当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题1.2>安全隐患示意图:1.3>安全隐患的解决办法:互拆锁1.4>互斥锁的使用格式@synchronized(...
分类:
编程语言 时间:
2014-06-24 11:47:01
阅读次数:
298
在开发过程中,有三个独立运行的程序模块,三个模块都对sqlite数据库进行读写操作。sqlite在linux共享性较差,所以需要加入互斥信号量解决三个模块访问数据库该问题。另外,在加入信号量后,信号量sem初始化为1,如果三个模块任意一个在读或写数据库时ctrl+c掉(调试过程需要),有时会造成信号量sem保持sem_wait后的值,也就是为0;这就造成了死锁。...
分类:
系统相关 时间:
2014-06-21 20:22:06
阅读次数:
656
1.概念 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。2.案例package org.lkl.thread;import java.util.concurren...
分类:
编程语言 时间:
2014-06-21 00:32:08
阅读次数:
324
下面先对condition_impl进行简要分析。condition_impl在其构造函数中会创建两个Semaphore(信号量):m_gate、m_queue,及一个Mutex(互斥体,跟boost::mutex类似,但boost::mutex是基于CriticalSection的):m_mute...
分类:
其他好文 时间:
2014-06-20 20:11:44
阅读次数:
211
对象操作Linux APIWindows API线程创建pthread_create()CreateThread()退出pthread_exit()ThreadExit()等待pthread_join()WaitForSingleObject()互斥锁创建pthread_mutex_init()Cr...
分类:
Windows程序 时间:
2014-06-20 17:23:05
阅读次数:
1095
1.boost锁的概述: boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁。2.mutex对象类(主要有两种): 1.boost::mutex(独占互斥类) -->有lock和unlock方法 2.boost::shared_mutex(共享互斥类) -->有...
分类:
编程语言 时间:
2014-06-18 11:16:03
阅读次数:
262
在工程文件中, WinMain函数里加上以下代码
[cpp] view
plaincopy
HANDLE hMutex = CreateMutex(NULL, false, "Process");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
...
分类:
编程语言 时间:
2014-06-17 19:03:37
阅读次数:
269