티스토리 뷰

la fermata, 개발/OpenMP

가위바위보 게임

창공미나래 2019. 2. 19. 23:04

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>

#define NUM_THREAD 3

typedef enum {ROCK, SCISSOR, PAPER} decision_t;
char* toString[3] = {"ROCK", "SCISSOR", "PAPER"};

static int my_rand()
{
    return omp_get_thread_num() ^ time(NULL);
}

int main(int argc, char** argv)
{
    int i, tid;
    decision_t decision[NUM_THREAD];
    decision_t my_result;
    decision_t winner, loser;
    int somebody_winner = 0, somebody_loser = 0;

#pragma omp parallel num_threads(NUM_THREAD) private(i, tid, my_result, winner, loser) firstprivate(somebody_winner, somebody_loser)
    {
        tid = omp_get_thread_num();
        my_result = (decision_t)(my_rand() % 3);
        printf("thread %d : %s!\n",tid, toString[my_result]);
        decision[tid] = my_result;
#pragma omp barrier
        
        printf("=============================================\n");
        if(my_result == ROCK)
        {
            winner = PAPER;
            loser = SCISSOR;
        }
        else if(my_result == PAPER)
        {
            winner = SCISSOR;
            loser = ROCK;
        }
        else
        {
            winner = ROCK;
            loser = PAPER;
        }

        for(i = 0 ; i < NUM_THREAD ; i++)
        {
            if(decision[i] == winner)
            {
                somebody_winner = 1;
                break;
            }
        }
        for(i = 0 ; i < NUM_THREAD ; i++)
        {
            if(decision[i] == loser)
            {
                somebody_loser = 1;
                break;
            }
        }

        if(somebody_winner == somebody_loser)
        {
            printf("thread %d : DRAW\n",tid);
        }
        else if(somebody_winner)
        {
            printf("thread %d : I LOSE\n",tid);
        }
        else 
            printf("thread %d : I WIN\n", tid);
    }
    return 0;
}

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함