⑴ 在linux中用一個進程創建3個線程,在三個線程分別列印各自的線程id
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>
#define THREAD_NUM 3
void * thread_handler(void *arg);
void main()
{
int i;
pthread_t tid[THREAD_NUM];
for(i = 0; i < THREAD_NUM; i++){
pthread_create(&tid[i], NULL, thread_handler, NULL);
}
for(i = 0; i < THREAD_NUM; i++){
pthread_join(tid[i],NULL);
}
}
void * thread_handler(void *arg)
{
printf("process id: %d thread id: %lu ", getpid(),pthread_self());
}
⑵ linux多線程實驗實現列印123的程序
寫一個mai方法,包含多線程庫函數頭文件,裡面調用pthread,照著庫函數的定義,隨便一大把
⑶ linux怎麼通過線程id去獲取線程
通過查看資料,發現一種比較簡單的方法就是在代碼中使用printf將當前線程的id列印出來。
而這也分成兩種情況:
1. 如果是pthread,則使用,
#include <pthread.h>
pthread_t pthread_self(void);
2. 如果不是pthread,即是由內核創建的線程,則使用,
#include <sys/types.h>
pid_t gettid(void);
獲取線程所在的進程的id,方法如下:
#include <sys/types.h>
⑷ linux 終端 多線程字元列印的問題
主要理解在fork函數。
你可以參考
這會產生分支,
fork會產生一個子進程。
根據fork的返回值的不同運行不同的代碼。
在子進程返回值是0,而父進程就是調用這個函數的進程中返回的則是進程的ID也就是>0。
所以在子進程中執行
pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,NULL);
pthread_join(tid,NULL);
printf("CHILD:value=%d",value);
這個子進程會啟動一個線程
void*runner(void*param){
value=5;
pthread_exit(0);
}
讓value=5;
所以輸出
CHILD:value=5;
而父進程則執行
wait(NULL);
printf("PARENT:value=%d",value);
由於wait()所以它會暫停父進程,等待子進程結束。
子進程結束後,然後父進程運行輸出
PARENT:value=0
至於為什麼是0,因為子進程和父進程的數據是在內存中各有一份的。
子進程只是改變了它那份。父進程中還是0.
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!
vaela
⑸ 怎麼用C語言實現兩個線程在Linux環境下列印
#include<stdio.h>
#include<pthread.h>
voidthread()
{
pthread_ttid=pthread_self();
while(1)
{
printf("pthread%u ",tid);
sleep(1);
}
}
intmain(intargc,char*argv[])
{
pthread_ttid=0;
if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}
if(0!=pthread_create(&tid,NULL,(void*)thread,NULL))
{
printf("createpthread%uerror ",tid);
return-1;
}
while(1)
{
printf("main ");
sleep(1);
}
return0;
}
//編譯記得加-lpthread
⑹ Linux裡面什麼是mp線程
線程mp是非常有用的診斷java應用問題的工具,每一個java虛擬機都有及時生成顯示所有線程在某一點狀態的線程mp能力。雖然每個java虛擬機線程mp列印輸出格式上略微有一些不同,但是線程mp的信息包含線程基本信息、線程的運行狀態、標識、調用的堆棧;調用的堆棧包含完整的類名,所執行的方法,如果可能的話還有源代碼的行數。
⑺ linux下,創建兩個線程,一個線程要求從屏幕輸入兩個整數,另一個線程列印整數的和....
創建2個線程,一個為GetInput,一個為PutInputSum,功能分別為接收輸入和列印整數和的功能
void GetInput(char *arg)
{
while(1)
{
//一直等待輸入
if(有輸出)
{
//獲取信號量a
//保存2個整數值
//釋放信號量b
}
}
}
void PutInputSum()
{
while(1)
{
//阻塞獲取信號量b
//計算2個整數的和,並輸出
//釋放信號量a
}
}
兄弟,偽碼基本是這樣了,具體的要自己實現。只要是利用信號量實現同步。2個線程,在沒有輸入的情況下都是阻塞的,不消耗CPU資源
⑻ linux怎麼查看線程cpu
可以用下面的命令將 cpu 佔用率高的線程找出來:
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
這個命令首先指定參數'H',顯示線程相關的信息,格式輸出中包含:user,pid,ppid,tid,time,%cpu,cmd,然後再用%cpu欄位進行排序。這樣就可以找到佔用處理器的線程了。
直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 獲取對於的進程號和線程號,然後跳轉到3.
查看哪個進程線程佔用cpu過高; top / ps -aux, 獲得進程號
確定哪個線程佔用cpu過高,進入進程號的目錄:/proc/pid/task,
執行:grep SleepAVG **/status | sort -k2,2 | head, 確定cpu佔用較高的線程號。
使用kill -3 pid 會列印線程堆棧的情況
在 Linux 下 top 工具可以顯示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc.),可以顯示每個 cpu 的利用率。但是無法顯示每個線程的 cpu 利用率情況,這時就可能出現這種情況,總的 cpu 利用率中 user 或 system 很高,但是用進程的 cpu 佔用率進行排序時,沒有進程的 user 或 system 與之對應。
⑼ linux多線程編程 在線程create中寫數據,在print中列印,自己寫的程序如下:
scanf("%s\n",&str);
把取址符去掉試試。