Also arbeite ich an einem Scheduler in einer meiner Klassen. Grundsätzlich geben wir vor, dass nur ein Thread gleichzeitig ausgeführt werden kann. Wir sollten eine Semaphor-Klasse verwenden, um es diesen Threads zu ermöglichen, sich selbst zu blockieren, um den Thread zu simulieren, der auf die CPU wartet.Implementieren einer binären Semaphor-Klasse in C++
Das Problem ist, die Threads scheinen zur falschen Zeit zu blockieren und zur falschen Zeit auszuführen. Ich habe mich gefragt, ob ich ein konzeptionelles Verständnis eines Semaphors vermisse und wie ich es umsetzen kann. Ich habe mich gefragt, ob ich ein Feedback zu meiner Implementierung bekommen könnte. Der Instruktor vorgesehen, um diese Header-Datei, die ich nicht in irgendeiner Weise geändert:
class Semaphore {
private:
int value;
pthread_mutex_t m;
pthread_cond_t c;
public:
/* -- CONSTRUCTOR/DESTRUCTOR */
Semaphore(int _val);
//~Semaphore();
/* -- SEMAPHORE OPERATIONS */
int P();
int V();
};
Dies ist meine Implementierung mit Posix stuff:
Semaphore::Semaphore(int _val){
value = _val;
c = PTHREAD_COND_INITIALIZER;
m = PTHREAD_MUTEX_INITIALIZER;
}
int Semaphore::P(){
if(value <= 0){
pthread_cond_wait(&c, &m);
}
value--;
}
int Semaphore::V(){
value++;
if(value > 0){
pthread_cond_signal(&c);
}
}
"Der Kursleiter hat diese Header-Datei zur Verfügung gestellt, die ich in keiner Weise verändert habe". – mfontanini
Das mag so sein, aber ich brauche meine Antwort deswegen nicht zu modifizieren. Tatsache ist, dass Sie hier kein binäres Semaphor haben und ich habe das richtigerweise darauf hingewiesen. Vielleicht besteht die Aufgabe darin, es als binären Semaphor zu implementieren, ohne den Header zu ändern; das kann gemacht werden. – Kaz
Ok ok du gehst. – mfontanini