執行緒間的資料共享與引數傳遞

2021-08-05 23:16:32 字數 1578 閱讀 6878

1、執行緒間的資料共享

(1)檔案共享:因為檔案儲存在pcb裡面,有檔案表陣列的存在。任何執行緒開啟的檔案,其他執行緒都可以通過檔案描述符操作檔案。

**驗證:

#include 

#include

#include

#include

#include

#include

void* pthread_fun(void *arg)

void main()

列印結果:

man pid = 3163

fun pid = 3163

所以檔案是共享的。

(2)全域性變數共享

**驗證:

#include 

#include

#include

#include

#include

#include

int ga=10;

void* pthread_fun(void *arg)

void main()

列印結果:ga = 20

所以全域性變數是共享的。

(3)堆區共享

**驗證:

#include 

#include

#include

#include

#include

#include

char*s=null;

void* pthread_fun(void *arg)

void main()

列印結果:*s=98

'b'是乙個字元,對應的ascll是98,所以堆區共享。

(4)棧區不共享。

總結:多執行緒之間共享全域性變數、堆區資料、檔案描述符,但是各執行緒有自己的棧區。

而對於父子程序之間:全域性、棧區、堆區都不會共享,但是檔案是共享的。

2、執行緒的引數傳遞

eg:在主線程中定義區域性變數int a=10,在函式執行緒中將其改為20。

可以,因為pthread_create中最後乙個引數是void*,可以傳位址。

**驗證:

#include 

#include

#include

#include

#include

#include

void* pthread_fun(void *arg)

void main()

列印結果:a=20

也可以用另外一種傳遞引數方法,如**所示,剛好與上面的相反,即將pthread_create()中的傳遞引數直接為值,從而函式執行緒中將「*」去掉。

#include 

#include

#include

#include

#include

#include

void* pthread_fun(void *arg)

void main()

列印結果:a=20

C 執行緒間傳遞引數

我們如果定義不帶引數的執行緒,可以用threadstart 帶乙個引數的用parameterizedthreadstart。帶多個引數的用另外的方法,下面逐一講述。一 不帶引數的 c sharp view plain copy using system using system.collection...

執行緒間共享資料

首先給大家分享乙個巨牛巨牛的人工智慧教程,是我無意中發現的。教程不僅零基礎,通俗易懂,而且非常風趣幽默,還時不時有內涵段子,像看 一樣,哈哈 我正在學習中,覺得太牛了,所以分享給大家!點這裡可以跳轉到教程 一 每個執行緒執行的 相同 若每個執行緒執行的 相同,共享資料就比較方便。可以使用同乙個run...

執行緒間的資料共享

執行緒間的資料共享可以通過兩種方式 通過thread子類建立程序的方法 通過runnable介面實現程序之間的共享 比較這兩種實現程序共享的區別 thread子類建立程序 package practice4 public class threadsale extends thread public ...