這裡主要實現兩個執行緒間通訊,當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...