Linux核心多執行緒 補充(各種平台下的多執行緒)

2021-07-16 05:01:41 字數 2687 閱讀 2957

這裡主要實現兩個執行緒間通訊,當flag = 10 之後通知另外乙個執行緒(也就是「linux核心多執行緒(二)」中的程式的各種平台實現)。

首先是c++ 11 的方式:

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int m = 10

;int

main()

if (flag ==m)

else

}cout

<< "

recv_task exit

"<

} );

thread recievetask([&]()

if(stop)

cout

<

wake up

"<< count <

times \t

"<

flag =

"<< flag <

cout

<

flag = 0

;

lockbuffer.unlock ();

recv_task_cond.notify_one ();

}cout

<< "

recieve task exit

"<

} );

cout

<< "

press enter to stop

"<

getchar();

stop = true

; recv_task.join();

recievetask.join();

cout

<

main thread

"<

return0;

}

執行結果:

下面是使用windows提過的api來實現的方式:

#include #include 

#include

#include

handle g_hthreadevent,g_hevent;

int flag = 0

;critical_section g_critical;

unsigned

int __stdcall recv_task(void *ppm)

return0;

}unsigned

int __stdcall recievetask(void *ppm)

return0;

}int

main()

執行結果:

最後是使用posix 執行緒庫實現的方式:

#include #include 

#include

#include

#include

enum

bool;

intstop;

pthread_mutex_t mutex = pthread_mutex_initializer;/*

初始化互斥鎖

*/pthread_cond_t cond = pthread_cond_initializer;/*

初始化條件變數

*/void *recievetask(void *);

void *recv_task(void *);

int i = 0

;int

main()

void *recv_task(void *junk)

*/if(i == 10

)

else

printf(

"recv_task: %d \n

",i++);

pthread_mutex_unlock(&mutex);/*

解鎖互斥量

*/sleep(1);

}pthread_cond_signal(&cond);

printf(

"recv_task exit \n");

}void *recievetask(void *junk)

printf(

"wake up recievetask: %d \n

",i);

i = 0

; pthread_cond_signal(&cond);

pthread_mutex_unlock(&mutex);

sleep(1);

}printf(

"recievetask exit \n");

}

執行結果為:

本來還想寫乙個vxworks下的多執行緒實現方式(可以通過taskspawn()函式來建立執行緒,使用msg_q_id來通訊),但是windriver解除安裝了。。。

Linux核心多執行緒 補充(各種平台下的多執行緒)

這裡主要實現兩個執行緒間通訊,當flag 10 之後通知另外乙個執行緒 也就是 linux核心多執行緒 二 中的程式的各種平台實現 首先是c 11 的方式 include include include include include include using namespace std cons...

多執行緒補充

標籤 空格分隔 多執行緒 pragma mark 延遲執行 void delay pragma mark 只執行一次 void once pragma mark 快速迭代 獲取 資料夾路徑和目的資料夾路徑 nsstring source users v desktop source nsstring...

linux 核心多執行緒程式設計

建立並啟動乙個核心執行緒.define kthread run threadfn,data,namefmt,返回should stop 標誌,看一下kthread stop 原始碼 int kthread stop struct task struct k int kthread should st...