이 질문을하기 전에 나는 오래 동안 검색을하고 있었고 문제를 해결하는 방법을 찾을 수 없습니다. 나는 다섯 개의 실 (노동자)을 가지고 있는데,이 노동자들은 금을 채굴하고, 전위를 전진 해달라는 금을 거기로 내려 놓는다.하나의 스레드가 조건 변수를 기다리는 대신 뭔가를 만드는 방법
그리고 내 문제는 거기에 노동자가 금을 채굴 할 때 사용자가 충분한 금이 있는지 확인하기 위해 b를 입력 할 수 있으며 이것이 막사를 짓는 것이 사실인지 확인하는 것입니다.
근로자가 금을 채굴 할 때 잠을 2 초가 걸리므로 나는 pthread_cond_timedwait()
을 사용합니다. 나는 병영 번호,지도상의 금과 전위적인 금을 저장하고있는 전역 변수를 가지고있다. 다음은 의사 코드이다.
void makeBarrack(size_t data) {
timespec waitTime = { 2, 0 };
pthread_mutex_lock(&check_mutex);
while (wantBarrack) {
pthread_cond_timedwait(&condp, &gold_mutex, &waitTime);
}
std::cout << "Worker" << data << "is making barrack" << std::endl;
wantBarrack = false;
pthread_mutex_lock(&unload_mutex);
avantPost -= 100;
pthread_mutex_unlock(&unload_mutex);
barracks++;
pthread_mutex_unlock(&check_mutex);
}
void *work(void *data, char input) {
size_t thread_num = (size_t) data;
pthread_mutex_lock(&gold_mutex);
timespec waitTime = { 2, 0 };
if ((input == 'B' || input == 'b') && avantPost >= 100) {
wantBarrack = true;
input = 0;
} else if ((input == 'B' || input == 'b') && avantPoste < 100) {
std::cout << "There is " << avantPoste << " gold" << std::endl;
}
while (wantBarrack) {
pthread_cond_timedwait(&condp, &gold_mutex, &waitTime);
}
makeBarrack(data);
}
I 소비자 생산자 같은 것을 만들려고 노력하지만 내 작업에서 내가 대신 내에 다른 스레드를 기다리는 일 (광산 금) 할 필요가있다.
기타 질문이 두 함수에서 같은 뮤텍스를 사용해야합니까?
P. 나는 멀티 스레딩에 초보자이며 잘못된 것이있는 경우 제 질문을 편집 할 수있는 좋은 사람이 될 것입니다.
이 유형의 시뮬레이션을 수행하는 것은 스레드를 사용하지 않는 것이 더 쉽습니다. 스레드를 사용하려는 특별한 이유가 있습니까? 루프 (델타 시간)에 매회 진행되는 표준 (단일 스레드) 게임 루프가이 작업에 접근하는 나의 방법 일 것입니다. –
네,하지만 스레드, 뮤텍스 및 조건 변수를 사용하는 방법을 배우기 위해 제 작업이 나에게 주어졌습니다. 스레드없이이 작업을 수행하는 방법을 알고 있습니다. –
왜 스레드 풀을 사용하지 않고 끝내야합니까? –