我正在嘗試宣告一個資料型別為 int 的變數指標,以存盤執行緒 ID(即 myid),然后將其設定為等于顯式型別轉換為引數 vargp 的整數指標。但是,當我嘗試輸出 ID 號時,我得到的是地址而不是實際值。for 回圈應該為 LOOP 迭代運行。這是我到目前為止對上一個宣告的內容。int *myid = (int *)vargp;這是函式的其余部分。
void* threadFunction(void *vargp) {
int LOOP = 0;
unsigned long i = 0;
int *myid = (int*) vargp;
printf("\n-----------------------------\n");
printf("\nThread %d has started\n", *myid);
printf("\n-----------------------------\n");
while (LOOP <= 5) {
printf("\nThread ID %d is printing iteration %d", *myid, LOOP);
LOOP ;
}
printf("\nThread %d has finished\n", *myid);
return NULL;
}
我得到Thread ID -136702208 is printing iteration 0了應該Thread ID 1 is printing iteration 0如何解決這個問題?
這是呼叫執行緒函式的函式。
void multiThreads() {
int SIZE = 5;
int i = 0;
int error;
pthread_t tid[SIZE];
for (i = 0; i < SIZE; i ) {
error = pthread_create(&(tid[i]), NULL, threadFunction, (void*) &(tid[i]));
if (error != 0) {
printf("\nThread can't be created : [%s]", strerror(error));
}
} //end for
while (i < SIZE) {
pthread_join(tid[i], NULL);
i ;
}
}
uj5u.com熱心網友回復:
由于 a 的內容pthread_t未定義,我將其更改tid為 a struct,它同時包含您想要的 thepthread_t t和數值。id初始化id并將idin的地址作為arg傳遞。將 SIZE 更改為大寫的大小通常用于您定義的值。使用main()而不是multiThreads()驅動未更改的threadFunction():
int main() {
int size = 5;
struct {
pthread_t t;
int id;
} threads[size];
for(unsigned i=0; i < size; i ){
threads[i].id = i 1;
int error = pthread_create(&threads[i].t, NULL, threadFunction, &threads[i].id);
if(error) {
printf("\nThread can't be created : [%s]", strerror(error));
}
}
for(unsigned i = 0; i < size; i ) {
pthread_join(threads[i].t, NULL);
}
return 0;
}
這里是輸出的片段:
-----------------------------
Thread 1 has started
-----------------------------
Thread ID 1 is printing iteration 0
Thread ID 1 is printing iteration 1
Thread ID 1 is printing iteration 2
Thread ID 1 is printing iteration 3
Thread ID 1 is printing iteration 4
Thread ID 1 is printing iteration 5
Thread 1 has finished
-----------------------------
Thread 5 has started
-----------------------------
Thread ID 5 is printing iteration 0
Thread ID 5 is printing iteration 1
Thread ID 5 is printing iteration 2
Thread ID 5 is printing iteration 3
Thread ID 5 is printing iteration 4
Thread ID 5 is printing iteration 5
Thread 5 has finished
-----------------------------
Thread 3 has started
-----------------------------
Thread 4 has started
-----------------------------
Thread ID 4 is printing iteration 0
Thread ID 4 is printing iteration 1
Thread ID 4 is printing iteration 2
Thread ID 4 is printing iteration 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465496.html
標籤:C
下一篇:C中的凱撒加密
