91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中獲取和釋放GIL

發布時間:2021-04-27 16:52:53 來源:億速云 閱讀:357 作者:Leah 欄目:編程語言

這篇文章給大家介紹怎么在python中獲取和釋放GIL,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

python的五大特點是什么

python的五大特點:1.簡單易學,開發程序時,專注的是解決問題,而不是搞明白語言本身。2.面向對象,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現面向對象編程。3.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

1、說明

線程對GIL的操作本質上就是通過修改locked狀態變量來獲取或釋放GIL。

2、獲取GIL實例

線程在其他線程已經獲取GIL的時候,需要通過pthread_cond_wait()等待獲取GIL的線程釋放GIL。

/*獲取GIL*/
int  PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
{
    int success;
    pthread_lock *thelock = (pthread_lock *)lock;
    int status, error = 0;
    status = pthread_mutex_lock( &thelock->mut ); /*先獲取mutex, 獲得操作locked變量的權限*/
    success = thelock->locked == 0;
    if ( !success && waitflag ) { /*已有線程上鎖,*/
        while ( thelock->locked ) {
            /*通過pthread_cond_wait等待持有鎖的線程釋放鎖*/
            status = pthread_cond_wait(&thelock->lock_released,
                                       &thelock->mut);
        }
        success = 1;
    }
    if (success) thelock->locked = 1; /*當前線程上鎖*/
    status = pthread_mutex_unlock( &thelock->mut ); /*解鎖mutex, 讓其他線程有機會進入臨界區等待上鎖*/
    if (error) success = 0;
    return success;
}

3、釋放GIL實例

特別注意最后一步, 通過pthread_cond_signal()通知其他等待(pthread_cond_wait())釋放GIL的線程,讓這些線程可以獲取GIL。

/*釋放GIL*/
void PyThread_release_lock(PyThread_type_lock lock)
{
    pthread_lock *thelock = (pthread_lock *)lock;
    int status, error = 0;
    status = pthread_mutex_lock( &thelock->mut ); /*通過mutex獲取操作locked變量的權限*/
    thelock->locked = 0; /*實際的釋放GIL的操作, 就是將locked置為0*/
    status = pthread_mutex_unlock( &thelock->mut ); /*解鎖mutex*/
    status = pthread_cond_signal( &thelock->lock_released ); /*這步非常關鍵, 通知其他線程當前線程已經釋放GIL*/
}

關于怎么在python中獲取和釋放GIL就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼勒克县| 芜湖市| 新沂市| 泸溪县| 从江县| 宁陵县| 黄梅县| 柳林县| 和静县| 贵阳市| 连江县| 安龙县| 任丘市| 潼南县| 娄烦县| 镇江市| 宝丰县| 罗平县| 关岭| 平乡县| 许昌县| 临沧市| 贵德县| 阜阳市| 揭东县| 电白县| 中山市| 栖霞市| 安远县| 巴彦淖尔市| 佛学| 富川| 富蕴县| 田东县| 安福县| 辛集市| 洱源县| 济宁市| 泗阳县| 海口市| 鄂托克旗|