我在C中遇到以下代码的问题。基本上我想创建两个线程并给它们都是“ergebnis”的整数值。在此之后,线程必须单独计算该值并打印它们各自的结果。
编译时我得到了这个错误:3.2.c: In function ‘erhoehenumeins’:
3.2.c:10:13: warning: dereferencing ‘void *’ pointer [enabled by default]
3.2.c:10:13: error: void value not ignored as it ought to be
3.2.c: In function ‘verdoppeln’:
3.2.c:20:18: error: invalid operands to binary * (have ‘void *’ and ‘int’)
代码:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void *erhoehenumeins(void * dummy) {
printf("Thread erhoehenumeins() wurde gestartet\n");
int temp;
temp= dummy+1;
printf("Thread erhoehenumeins() wurde beendet\n");
printf("Ergebnis=%d\n",temp);
}
void *verdoppeln(void * dummy) {
printf("Thread verdoppeln() wurde gestartet\n");
int temp=dummy*2;
printf("Thread verdoppeln() wurde beendet\n");
printf("Ergebnis=%d\n",temp);
}
int main() {
int ergebnis=3;
pthread_t thread1, thread2;
// Thread 1 erzeugen
pthread_create( &thread1, NULL, &erhoehenumeins, &ergebnis );
// Thread 2 erzeugen
pthread_create( &thread2, NULL, &verdoppeln, &ergebnis );
// Main-Thread wartet auf beide Threads.
pthread_join( thread1, NULL );
pthread_join( thread2, NULL );
printf("\nHaupt-Thread main() wurde beendet\n");
exit(0);
}
感谢您的帮助!
答案 0 :(得分:1)
这样做:
void * erhoehenumeins(void * dummy)
{
int * p = (int *) dummy;
++*p;
return NULL;
}
和
int ergebnis = 3;
pthread_create(&thread1, NULL, &erhoehenumeins, &ergebnis);
这当然是未定义的行为并且完全被破坏了,但它现在应该这样做。
答案 1 :(得分:1)
在第
行int temp=dummy*2;
值dummy
是void *
- 编译器不能将其乘以2.
也许你应该这样做&#34;
int temp = (*(int *)dummy)*2;