>

안녕하세요 여러분 코드에 약간의 문제가 있습니다

이 프로그램은 계산해야합니다  ((a + b) x (c + d))/e

하나의 스레드 세 개를 만듭니다.  추가 만  곱셈 만  부문

main ()에서 하나의 스레드 만 작성해야합니다. 나누기 스레드에 결과를 표시합니다. int 값 (a, b, c, d, e)은 main 사용자에서 가져와 main에서 작성된 스레드에 전달해야합니다. 각 단계의 다른 결과는 다음 단계에서 전달되어야합니다.

이것은 위의 시나리오를 위해 작성한 프로그램입니다

#include <iostream>
#include <pthread.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void *Division(void *arg_div)
{
    int result = arg_div[0]/arg_div[1];
    cout << result ;
    pthread_exit(NULL);
}
void *Multiplication(void *arg_mul)
{
    int arg1[2];
    arg1[0]=arg_mul[0]*arg_mul[1];
    arg1[1]=arg_mul[2];
    pthread_t div;
    pthread_create(&div,NULL,Division,(void*)arg1);
    pthread_join(div,NULL);
    pthread_exit(NULL);
}
void *Addition(void *arg_add)
{
    int arg[3];
    arg[0]=arg_add[0]+arg_add[1];
    arg[1]=arg_add[2]+arg_add[3];
    arg[2]=arg_add[4];
    pthread_t ad;
    pthread_create(&ad,NULL,Multiplication,(void*)arg);
    pthread_join(ad,NULL);
    pthread_exit(NULL);
}
int main()
{
    int values[5];
    for(int i=0;i<5;i++)
    {
        cin >> values[i];
    }
    pthread_t pa;
    pthread_create(&pa,NULL,Addition,(void*)values);
    pthread_join(pa,NULL);
    return 0;
}


  • 답변 # 1

    포인터 유형 (C 스타일 ...)을 void* 로 변경 한 이유 ? (올바른 길을 걸을 수 있도록 질문을하세요.)

    그냥 int* 를 얻을  다시, 그들은 당신이 역 참조 할 수있는 포인터입니다. 와이즈 비즈  포인터이지만 void* 를 얻을 수 없습니다  객체에 대한 작업이 적습니다.

    void
    
    

  • 답변 # 2

    void 포인터에 대한 산술이 허용되지 않으므로 void *를 대상 유형으로 변환해야합니다 (예 : int *

    ).

    void *를 int *로 변환 한 후 Addition ()은 다음과 같이 보입니다. 모든 함수를 동일하게 변경하여 작동해야합니다.

    int* args = static_cast<int*>(arg);
    
    

  • 답변 # 3

    void *Addition(void *arg_add) { int *input = (int *)arg_add; int arg[3]; arg[0]=input[0]+input[1]; arg[1]=input[2]+input[3]; arg[2]=input[4]; } 를 역 참조 할 수 없습니다  -스레드 함수의 매개 변수를 void* 로 다시 캐스팅해야합니다. .

    예를 들어

    int*
    
    

  • 답변 # 4

    void *Division(void *arg_div)
    {
        int* args = static_cast<int*>(arg_div);
        int result = args[0]/args[1];
    ...
    
    

    다음은 문제에 대한 수정입니다. void *를 int *로 변환 한 다음 int 배열의 값을 사용해야합니다.

    void * Division(void * arg_div) { int * arg_div_int = (int * ) arg_div; int result = arg_div_int[0] / arg_div_int[1]; ... } void * Multiplication(void * arg_mul) { int * arg_mul_int = (int * ) arg_mul; int arg1[2]; arg1[0] = arg_mul_int[0] * arg_mul_int[1]; arg1[1] = arg_mul_int[2]; ... } void * Addition(void * arg_add) { int * arg_add_int = (int * ) arg_add; int arg[3]; arg[0] = arg_add_int[0] + arg_add_int[1]; arg[1] = arg_add_int[2] + arg_add_int[3]; arg[2] = arg_add_int[4]; .. }

  • 이전 python - 왜 이것이 발전기 목록을 반환합니까?
  • 다음 arrays - Angular2 + 하나의 요소에 여러 템플릿 바인딩을 가질 수 없습니다