【发布时间】:2021-06-01 16:09:28
【问题描述】:
无法将 pthread 的最后一个参数作为实际 int 传递。我希望能够访问放在 pthread_create 的最后一个参数中的 1。任何帮助将不胜感激!
#include <pthread.h>
#include <unistd.h>
#include <malloc.h>
#define MAX 5
int arr[MAX];
int p0 = 0;
int p1 = 0;
int p2 = 0;
int p3 = 0;
int p4 = 0;
void *process(void *arg);
int main(int argc, char *argv[]) {
if(argc != 7) {
printf("must be 6 ints");
return -1;
}
int quantum = atoi(argv[1]);
p0 = atoi(argv[2]);
p1 = atoi(argv[3]);
p2 = atoi(argv[4]);
p3 = atoi(argv[5]);
p4 = atoi(argv[6]);
下面这个是我指的pthread。
int *pointer0 = malloc(sizeof(*pointer0));
*pointer0 = p0;
/* intialize thread 1 */
pthread_t tid0;
pthread_attr_t attr0;
pthread_attr_init(&attr0);
pthread_create(&tid0, &attr0, process, 1);
pthread_join(tid0, NULL);
//if the time remaining of process is not zero, run process[i] again
return 0;
}
void *process(void *arg) {
//char **pointer = (char**) arg;
//int burst = **pointer;
int burst = 0;
//int i = atoi(arg);
printf("%ls", (int *)arg);
pthread_exit(NULL);
}
【问题讨论】:
-
void *arg 是一个指针,如果你想将它强制转换为 int,那么你应该使用 (long),尽管将 long 作为指针传递可能会发出警告。
-
不太确定该怎么做。你是说这不能做吗?
-
可以做到,Miguel Carvalho 写了一个很好的解释如何做到这一点。