2017-05-10 4 views
-6

Wie sollte die korrekte alternative Form des Lichtschaltsemaphors in nicht objektorientierter C-Sprache aussehen? Python-Referenz von Lichtschalter Semaphor ist in diesem Papierkram Little Book Of Semaphores geschrieben.Korrekte Form des Lichtschaltsemaphors in C

Lichtschalter Code:

class Lightswitch : 

    def __init__(self): 
    self.counter = 0 
    self.mutex = Semaphore(1) 

    def lock(self, semaphore): 
    self.mutex.wait() 
     self.counter += 1 
     if self.counter == 1: 
     semaphore.wait() 
    self.mutex.signal() 

    def unlock(self, semaphore): 
    self.mutex.wait() 
     self.counter -= 1 
     if self.counter == 0: 
     semaphore.signal() 
    self.mutex.signal() 
+0

„_How sollte die richtige alternative Form der Lichtschalter Semaphore wie in Nicht-Objekt C Sprache orientiert suchen _ "ist nur eine phantastische Art zu sagen," Code für mich schreiben ", für die diese Website nicht ist. – csmckelvey

+0

@csm_dev Es gibt keine Notwendigkeit, "Code für mich zu schreiben". Sie könnten einfach auf einige Ideen zeigen, wie ich es tun soll. Vergiss es, ich habe es trotzdem gemacht. Einen schönen Tag noch :) – Amphoru

Antwort

-1

Eine der Lösungen könnte wie folgt aussehen:

typedef struct 
{ 
    int counter; 
    sem_t mutex; 

}LightSwitch; 

void ls_lock(LightSwitch *ls, sem_t *sem){ 
    sem_wait(&ls->mutex); 
    ls->counter++; 
    if (ls->counter == 1) 
    { 
     sem_wait(sem); 
    } 
    sem_post(&ls->mutex); 
} 

void ls_unlock(LightSwitch *ls, sem_t* sem){ 
    sem_wait(&ls->mutex); 
    ls->counter--; 
    if (ls->counter == 0) 
    { 
     sem_post(sem); 
    } 
    sem_post(&ls->mut); 
}