簡單的Linux多執行緒程式設計

2021-07-16 18:28:45 字數 2395 閱讀 4424

最近在實習的公司做乙個ros系統,有個部分需要控制電機,以及分析電機碼盤給上來的資料,用的是串列埠通訊。

由於碼盤給上來的資料時間是不固定的,下放命令的時間也是不固定的,所以只能做成非同步通訊的形式。所以就需要用到多執行緒程式設計了。

程式語言是c,但由於另乙個部分是企業提供的,c++形式,用到了很多類,所以這裡編譯用的是g++

這篇部落格裡寫的只是個demo,實現了執行緒的功能,加上串列埠通訊的在

下面這個**本來是另乙個實習生在網上找來的,但是他說跑起來有亂碼的現象。我把**拿過來之後連編譯都過不去,後來搞了好幾個小時才搞通,順便找到了亂碼的原因,也是有點坑在裡面的,所以特地記錄下來。

太長不看的同學可以直接copy下面的**,親測能跑

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define max 2

pthread_t thread[2];

pthread_mutex_t mut;

int fd;

int set_port(int fd,int nbits)

bzero(&newtio,sizeof(newtio)); //清零

newtio.c_cflag |=clocal|cread;//用於本地連線和接收使能

newtio.c_cflag &=~csize;//設定資料位

switch(nbits)

//設定奇校驗位

newtio.c_cflag |=parenb;

//設定波特率

cfsetispeed(&newtio,b115200);

cfsetospeed(&newtio,b115200);

//設定停止位

newtio.c_cflag &=~parenb;

if((tcsetattr(fd,tcsanow,&newtio))!=0)

printf("mistakes over \n");

return

0; }

void *thread1(void*)

else

if(i==1)

sleep(1);

pthread_mutex_unlock(&mut);

}printf("thread1 stop\n");

pthread_exit(null);

}void *thread2(void*)

; for (j = 0; j< max; j++)

printf("thread2 stop\n");

pthread_exit(null);

}void thread_create(void)

void thread_wait(void)

if(thread[1] !=0)

}int main(void)

pthread_mutex_init(&mut,null);

printf("creat preadth\n");

thread_create();

printf("program on..... \n");

while(1);

thread_wait();

close(fd);

}return

0;}

終端編譯命令

$ g++ main.cpp -o thread_test  -lpthread
執行命令

./thread_test
先看下全域性變數

然後看 main 函式

set_port 函式沒什麼好說的,跟執行緒沒關係,不做解釋了。

pthread_mutex_init 的用法也很固定,沒有坑。

thread_create 是自己寫的函式

void thread_create(void)

最重要的是執行緒函式的函式頭

void *thread1(void*)

編譯的時候也有個大坑

$ g++ main.cpp -o thread_test  -lpthread
-lpthread必須要加上,否則會報 函式未定義 錯誤

原因是,pthread_create函式不在linux預設的庫,編譯的時候需要鏈結其所在的靜態庫,也就是加上這句話。

其他的一些坑:

Linux 多執行緒程式設計

1.建立執行緒和退出的函式原型 int pthread create pthread t thread,pthread attr t attr,void start routine void void arg pthread exit 0 其他還有很多相關的函式。2.編譯時要加上 lpthread ...

Linux多執行緒程式設計

linux 多執行緒程式設計 多執行緒支援 posix 執行緒介面,稱為 pthread,pthread create 用來建立執行緒,pthread join 等待執行緒結束,函式的原型分別如下 extern int pthread create p pthread t thread,const ...

linux 多執行緒程式設計

多執行緒的使用 典型的執行緒包括乙個執行時間系統,它可以按透明的方式來管理執行緒。通常執行緒包包括對執行緒的建立和刪除,以及對互斥和條件變數的呼叫。posix標準執行緒庫具有這些呼叫。這些包還提供執行緒的動態建立和刪除,因此,直到執行時間之前,執行緒的個數不必知道。執行緒具有乙個id 乙個堆疊 乙個...