国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux多線程編程(一)

2024-08-28 00:01:03
字體:
來源:轉載
供稿:網友
linux多線程設計是指基于Linux操作系統下的多線程設計,包括多任務程序的設計,并發程序設計,網絡程序設計,數據共享等。Linux系統下的多線程遵循POSIX線程接口,稱為pthread。

一、什么是線程?

      線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

二、什么時候使用多線程?     當多個任務可以并行執行時,可以為每個任務啟動一個線程。
三、線程的創建     使用pthread_create函數。    

#include<pthread.h>int pthread_create (pthread_t *__restrict __newthread,//新創建的線程ID  __const pthread_attr_t *__restrict __attr,//線程屬性  void *(*__start_routine) (void *),//新創建的線程從start_routine開始執行  void *__restrict __arg)//執行函數的參數

返回值:成功-0,失敗-返回錯誤編號,可以用strerror(errno)函數得到錯誤信息
四、線程的終止   三種方式線程從執行函數返回,返回值是線程的退出碼線程被同一進程的其他線程取消調用pthread_exit()函數退出。這里不是調用exit,因為線程調用exit函數,會導致線程所在的進程退出。

一個小例子:

啟動兩個線程,一個線程對全局變量num執行加1操作,執行五百次,一個線程對全局變量執行減1操作,同樣執行五百次。

#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h>#include <string.h>int num=0;void *add(void *arg) {//線程執行函數,執行500次加法  int i = 0,tmp;  for (; i <500; i++)  {    tmp=num+1;    num=tmp;    printf("add+1,result is:%d/n",num);  }  return ((void *)0);}void *sub(void *arg)//線程執行函數,執行500次減法{  int i=0,tmp;  for(;i<500;i++)  {    tmp=num-1;    num=tmp;    printf("sub-1,result is:%d/n",num);  }  return ((void *)0);}int main(int argc, char** argv) {    pthread_t tid1,tid2;  int err;  void *tret;  err=pthread_create(&tid1,NULL,add,NULL);//創建線程  if(err!=0)  {    printf("pthread_create error:%s/n",strerror(err));    exit(-1);  }  err=pthread_create(&tid2,NULL,sub,NULL);  if(err!=0)  {    printf("pthread_create error:%s/n",strerror(err));     exit(-1);  }  err=pthread_join(tid1,&tret);//阻塞等待線程id為tid1的線程,直到該線程退出  if(err!=0)  {    printf("can not join with thread1:%s/n",strerror(err));    exit(-1);  }  printf("thread 1 exit code %d/n",(int)tret);  err=pthread_join(tid2,&tret);  if(err!=0)  {    printf("can not join with thread1:%s/n",strerror(err));    exit(-1);  }  printf("thread 2 exit code %d/n",(int)tret);  return 0;}

使用g++編譯該文件(g++ main.cpp -o main)。此時會報錯undefined reference to `pthread_create'。


報這個錯誤的原因是:pthread庫不是linux默認的庫,所以在編譯時候需要指明libpthread.a庫。

解決方法:在編譯時,加上-lpthread參數。

執行結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邢台市| 温宿县| 潜江市| 铅山县| 永德县| 洪江市| 阳朔县| 大理市| 海盐县| 霸州市| 德保县| 宜宾县| 赤峰市| 白城市| 公安县| 贵州省| 安康市| 城固县| 阳新县| 南皮县| 望城县| 洛川县| 丹棱县| 星座| 阳春市| 文成县| 拉孜县| 万年县| 韶关市| 玛多县| 临猗县| 根河市| 秦皇岛市| 开原市| 衡阳县| 岫岩| 泗阳县| 利辛县| 宜宾县| 芦溪县| 榆社县|