0

我在 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);
}

感谢您的帮助!

4

2 回答 2

1

做这个:

void * erhoehenumeins(void * dummy)
{
    int * p = (int *) dummy;
    ++*p;

    return NULL;
}

和:

int ergebnis = 3;
pthread_create(&thread1, NULL, &erhoehenumeins, &ergebnis);

这当然是未定义的行为并且完全被破坏,但现在应该这样做。

于 2013-05-03T22:13:13.503 回答
1

在行

int temp=dummy*2;

该值为dummya void *- 编译器不能将其乘以 2。

也许你应该这样做”

int temp = (*(int *)dummy)*2;
于 2013-05-03T22:13:24.407 回答