0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

多線程兩種同步方式的操作方法分析

電子設計 ? 來源:電子工程網(wǎng) ? 作者:張駿 ? 2021-06-26 14:57 ? 次閱讀

在線程對共享相同內(nèi)存操作時,就會出現(xiàn)多個線程對同一資源的使用,為此,需要對這些線程進行同步,以確保它們在訪問共享內(nèi)存的時候不會訪問到無效的數(shù)值。

以下是線程的幾種同步方式:

1、 互斥量。

通過使用pthread的互斥接口保護數(shù)據(jù),確保同一時間只有一個線程訪問數(shù)據(jù)?;コ饬繌谋举|(zhì)上講是一把鎖,在訪問共享資源前對互斥量進行加鎖,在訪問完成后釋放互斥量上的鎖。如下例所示,就是互斥量對共享數(shù)據(jù)的操作:

}

2、信號

該信號量是Posix提供的基于內(nèi)存的信號量,它們由應用程序分配信號量的內(nèi)存空間。如下例所示,就是信號量對共享數(shù)據(jù)的操作:

#include

#include

#include

int value = 5;

sem_t sem1,sem2;

void mainshow();

void *mythread();

int main()

{

int retval;

pthread_t tid;

retval = sem_init(&sem1,0,0);

retval = sem_init(&sem2,0,1);

retval =pthread_create(&tid,NULL,mythread,NULL);

mainshow();

pthread_join(tid,NULL);

printf(“value3 = %d\n”,value);

return 0;

}

void *mythread()

{

int retval;

retval = sem_wait(&sem1);

value = value + 1;

printf(“value1 = %d\n”,value);

retval = sem_post(&sem2);

pthread_exit((void *) 0);

}

void mainshow()

{

int retval;

retval = sem_wait(&sem2);

value = value + 1;

printf(“value2 = %d\n”,value);

retval = sem_post(&sem1);

}

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6811

    瀏覽量

    88743
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    503

    瀏覽量

    19636
收藏 人收藏

    評論

    相關(guān)推薦

    多線程編程之四 線程同步

    多線程編程之四 線程同步八、線程同步  雖然多線程能給我們帶來好處,但是也有不少問題需要解決
    發(fā)表于 10-22 11:43

    Python多線程編程原理

    多線程使用方法Python中使用線程兩種方式,分別是函數(shù)或者用類來包裝線程對象。用函數(shù)來包裝
    發(fā)表于 11-22 14:01

    python創(chuàng)建多線程兩種方法

    MING3. 線程對象的方法上面介紹了當前 Python 中創(chuàng)建線程兩種主要方法。創(chuàng)建線程是件
    發(fā)表于 03-15 16:47

    如何使用多線程和異步操作等并發(fā)設計方法來最大化程序的性能

    (超線程、雙核)的普及,多線程和異步操作等并發(fā)程序設計方法也受到了更多的關(guān)注和討論。本文主要是想探討一下如何使用并發(fā)來最大化程序的性能?! ?b class='flag-5'>多線程
    發(fā)表于 08-23 16:31

    QNX環(huán)境下多線程編程

    介紹了QNX 實時操作系統(tǒng)和多線程編程技術(shù),包括線程同步方法、多線程程序的
    發(fā)表于 08-12 17:37 ?30次下載

    Linux多線程同步方法

    線程對共享相同內(nèi)存操作時,就會出現(xiàn)多個線程對同一資源的使用,為此,需要對這些線程進行同步,以確保它們在訪問共享內(nèi)存的時候不會訪問到無效
    發(fā)表于 08-08 14:17 ?2046次閱讀

    設計多線程和多核系統(tǒng)

    如果您的微控制器應用程序需要處理數(shù)字音頻,請考慮采用多線程方法。使用多線程設計方法可以使設計者以簡單的方式重用其部分設計。
    發(fā)表于 08-14 15:42 ?9次下載
    設計<b class='flag-5'>多線程</b>和多核系統(tǒng)

    java多線程同步方法

    二、為什么要線程同步 因為當我們有多個線程要同時訪問一個變量或?qū)ο髸r,如果這些線程中既有讀又有寫操作時,就會導致變量值或?qū)ο蟮臓顟B(tài)出現(xiàn)混亂,
    發(fā)表于 09-27 13:19 ?0次下載

    多線程好還是單線程好?單線程多線程的區(qū)別 優(yōu)缺點分析

    摘要:如今單線程多線程已經(jīng)得到普遍運用,那么到底多線程好還是單線程好呢?單線程多線程的區(qū)別又
    發(fā)表于 12-08 09:33 ?8.1w次閱讀

    Linux中的常用多線程同步方式淺析

    嵌入式linux中文站給大家介紹三Linux中的常用多線程同步方式:互斥量,條件變量,信號量。
    發(fā)表于 05-02 14:49 ?3043次閱讀
    三<b class='flag-5'>種</b>Linux中的常用<b class='flag-5'>多線程</b><b class='flag-5'>同步</b><b class='flag-5'>方式</b>淺析

    python創(chuàng)建多線程兩種方法

    1. 用函數(shù)創(chuàng)建多線程 在Python3中,Python提供了一個內(nèi)置模塊 threading.Thread ,可以很方便地讓我們創(chuàng)建多線程。 threading.Thread() 一般接收個參數(shù)
    的頭像 發(fā)表于 03-15 16:47 ?5263次閱讀

    多線程同步的幾種方法

    多線程同步是指在多個線程并發(fā)執(zhí)行的情況下,為了保證線程執(zhí)行的正確性和一致性,需要采用特定的方法來協(xié)調(diào)線程
    的頭像 發(fā)表于 11-17 14:16 ?1102次閱讀

    多線程如何保證數(shù)據(jù)的同步

    多線程編程是一并發(fā)編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執(zhí)行不同的任務,共享同一份數(shù)據(jù)。由于
    的頭像 發(fā)表于 11-17 14:22 ?1108次閱讀

    java實現(xiàn)多線程的幾種方式

    Java實現(xiàn)多線程的幾種方式 多線程是指程序中包含了個或以上的線程,每個線程都可以并行執(zhí)行不同
    的頭像 發(fā)表于 03-14 16:55 ?550次閱讀

    Python中多線程和多進程的區(qū)別

    Python作為一高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中
    的頭像 發(fā)表于 10-23 11:48 ?231次閱讀
    Python中<b class='flag-5'>多線程</b>和多進程的區(qū)別