linuxpthreadcreate
『壹』 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);
}
這樣就行呀, 加鎖後另一個要等待鎖釋放