tôi đang cố gắng để tạo ra một chủ đề và từ những gì tôi nhớ điều này nên là đúng cách để làm điều đó:pthread_create không hoạt động. đi qua lập luận 3 cảnh báo
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5
int SharedVariable =0;
void SimpleThread(int which)
{
int num,val;
for(num=0; num<20; num++){
if(random() > RAND_MAX/2)
usleep(10);
val = SharedVariable;
printf("*** thread %d sees value %d\n", which, val);
SharedVariable = val+1;
}
val=SharedVariable;
printf("Thread %d sees final value %d\n", which, val);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t< NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, SimpleThread, (void*)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
/* Last thing that main() should do */
pthread_exit(NULL);
}
Và lỗi mà tôi nhận được là một trong những điều này:
test.c: Trong hàm 'main': test.c: 28: warning: đối số truyền 3 của 'pthread_create' từ loại con trỏ không tương thích /usr/include/pthread.h:227: note: expected 'void * (* ) (void *) 'nhưng đối số là loại' void (*) (i nt) ’
Tôi không thể thay đổi chức năng SimpleThread để thay đổi loại tham số không phải là tùy chọn mặc dù tôi đã thử và không hoạt động.
Tôi đang làm gì sai?
Tôi đã thử làm điều đó nhưng sau đó tôi nhận được lỗi mỗi khi tôi sử dụng int mà – randomizertech
@ fgualda87 Là một bộ đếm thời gian nhanh, bạn có thể chuyển 'int' thành' void * '- chỉ để đảm bảo mã của bạn hoạt động. Thêm 'int which = (int) args;', và mã nên biên dịch và chạy. Bạn nên xem xét gói 'int' trong một' struct', mặc dù. – dasblinkenlight
Hoàn hảo nó hoạt động! Có cách nào để làm điều này mà không thay đổi phương thức SimpleThread? – randomizertech