當前位置:首頁 » 操作系統 » linuxpthreadcreate

linuxpthreadcreate

發布時間: 2023-01-24 17:16:09

『壹』 linux 傳遞『pthread_create』的第 3 個參數時在不兼容的指針類型間轉換

需要修改的不是pthread_create的第3個參數,而是第3個參數對應的線程函數的函數原型,線程函數的原型是這樣的形式:
void *(*start_routine) (void *);
線程函數的參數和返回值都是一個void指針,而你寫的線程函數的參數卻是一個int指針,把線程函數的參數修改成void *類型就可以了。如果你需要int型,可以這樣寫(用強制類型轉換,因為線程函數的參數是void *,所以這在線程函數內部經常這樣用):
void * xxx(void *xa)
{
printf("Thread function argument was %d\n", *(int *)xa);
......
}

『貳』 linux pthread_create() 產生斐波那契數列

1. pthread_join 是阻塞函數,運行該函數後主線程會阻塞等待子線程操作結束,你把pthread_join放在主線程輸出之後,存在這樣的問題:在子線程還沒賦值完成前,父線程已經把未操作的值輸出了。
2.傳遞參數錯誤,pthread_create傳遞的是"&a",也就是數組的起始地址的地址,你只是改變數組值,不需要對起始地址更改,完全可以傳遞 a,而且看你thread_fun函數應該傳遞的是a。

3. 最關鍵的,我納悶怎麼沒輸出,檢查了下你的thread_fun才發現「for(k=2;k<=512;k++)」,數組越界了! 造成的結果是把n值直接給改了。。
修改版 (有warning, 最好把參數設成void *):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <pthread.h> /*pthread_create()......*/
#include <unistd.h>

pthread_t ntid;

void *thread_fun(int *p) {/*.......*/
int k;
p[0] = 0;
p[1] = 1;

for(k=2;k<512;k++)
{
p[k] = p[k-1] + p[k-2];
}
return NULL;
}

int main(void){
int err;
int i,n;
int a[512];

printf("Please enter n:(n>=3 & n<=512) ");
scanf("%d",&n);
/*........*/
err=pthread_create(&ntid,NULL,thread_fun,(void *)a);
if (err!=0) {
fprintf(stderr, "......: %s\n", strerror(err));
exit(1);
}
pthread_join(ntid,NULL); /*...1.....*/
for(i = 0 ; i<=n ; i++){
printf("F[%d] = %d\n",i,a[i]);
}

}

『叄』 用Linux,pthread相關函數創建一個調度策略為NORMAL,priority=15的線程,

NORMAL的調度策略是什麼?

創建一個線程很簡單,用pthread_create就可以做到,具體使用方法你man下或者搜索都有。

需要提到的是你要改變調度策略和優先順序,我查了下,用sched_setscheler就可以做到了:
int sched_setscheler(pid_t pid, int policy, const struct sched_param *param);

policy是設置調度策略,param是設置優先順序。

『肆』 linux下用這個makefile鏈接線程庫老提示pthread_create未找到,請高手詳細解答!謝謝!

好奇怪。。。你的腳本裡面加了-lpthread啊,單獨用命令編譯下,看行不?

『伍』 linux下如何使用pthread_create創建2線程

printf("1\n");
printf("2\n");

不可能不執行吧,除非你的程序其它地方有問題,比如juzhen1或juzhen2有問題,導致程序掛掉了

還有順便說一句,你這個時間統計根本就是創建兩個線程的所消耗的時間,而不是這兩個線程執行的時間,如果你要統計這兩個線程執行時間,你應該在
pthread_join(pid1, NULL);
pthread_join(pid2, NULL);
end=clock();
這樣只有在兩個線程執行完後才會執行end=clock();這一句

還有 pthread_t pid1, pid2這兩句最好改成 pthread_t tid1, tid2;要學會良好的變數命名習慣,這樣對你以後有好處。

『陸』 在linux中用pthread_create()創建一個新線程,不能執行execl函數

可以啊 只不過用了excel之後就不執行它後面的語句了。 所以你應該用fork創建一個新進程

『柒』 linux 下pthread_create函數參數問題

問題出在類型轉成指針上,和 tid_num應該沒關系。chat 參數應該是一個原型類似於下面的函數的函數:
void * function(void *arg)。 你不應該將chat函數強制轉換成 void *

『捌』 linux c編程中,使用pthread_create函數創建線程時,函數的第3個參數的是void

可以這樣聲明,但是在調用pthread_create函數的時候需要將線程函數的指針強制類型轉換成void *(pthread)(void*),否則編譯器會報錯。

『玖』 Linux多線程編譯中為什麼說pthread_create未定義

問題描述說的太簡單了,完全無法回答嘛
至少把出錯信息完整的帖一遍阿

循環接收有兩種方法:多線程+同步接收 ; 單線程+非同步接收

其實非同步接收也不是單線程,只是需要你管理的線程只有一個而已

『拾』 Linux下的線程庫pthread庫中的pthread_create()函數創建兩個線程。

void * thread1() //線程1
{
//............. pthread_mutex_lock(&mut);
a += 1; //①
b = a; //②
pthread_mutex_unlock(&mut);
}

void * thread2() //線程2
{
//.............
pthread_mutex_lock(&mut);
a += 2;
pthread_mutex_unlock(&mut);
}

這樣就行呀, 加鎖後另一個要等待鎖釋放

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:535
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:32
linux485 發布:2025-07-05 14:38:28 瀏覽:310
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:760
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:437
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:734
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:249
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:696
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:288
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:838