В настоящее время я перебираю пример, который наш профессор дал нам перед нашим текущим заданием с семафорами и pthreading в C ++. В настоящее время вся программа ожидает, когда один из потоков заблокирован.
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int account = 99;
bool sent = false;
int rate = 12;
int hours = 15;
sem_t s1;
sem_t s2;
//work thread
void *work(void*){
while(1){
sem_wait(&s1);
account += hours * rate;
cout << "Account: " << account << endl;
if(account >= 1000 && !sent){
sem_post(&s2);
sent = true;
}
sem_post(&s1);
pthread_exit(NULL);
}
}
void* buy(void*){
while(1){
sem_wait(&s2);
sem_wait(&s1);
account -= 1000;
sent = false;
cout << "iPhone bought!! Account: " << account << endl;
sem_post(&s1);
pthread_exit(NULL);
}
}
int main(){
pthread_t workt, buyt;
sem_init(&s1, 0, 1);
sem_init(&s2, 0, 0);
while(1){
pthread_create( &workt, NULL, work, NULL);
pthread_create( &buyt, NULL, buy, NULL);
pthread_join(workt, NULL);
pthread_join(buyt, NULL);
}
sem_close(&s1);
sem_close(&s2);
pthread_exit(NULL);
}
Программа должна непрерывно запускать рабочий поток до тех пор, пока на счету не появится достаточное количество (1000), затем она купит iPhone. Мой код будет работать до тех пор, пока он не достигнет семафора sem_wait (s2) в потоке 'buy', который блокирует поток должным образом, но вся моя программа ожидает и не запускает поток 'work' снова.