2017-05-10 5 views
-6

lightswitchセマフォの正しい代替形式は、オブジェクト指向でないC言語のように見えますか? lightswitchセマフォのPythonリファレンスは、この文書ワークLittle Book Of Semaphoresに書かれています。Cのlightswitchセマフォの正しい形式

LightSwitchのコード:

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はLightSwitchの正しい代替形式は、セマフォ非オブジェクト指向のC言語でのようになります_? "このウェブサイトの目的ではない"私のためのコードを書く "と言ってもいい方法です。 – csmckelvey

+0

@csm_dev "私のためにコードを書く"必要はありません。どのようにすればいいのか、いくつかのアイデアを指摘できます。心配しないで、私はそれをとにかく作った。良い一日を :) – Amphoru

答えて

-1

解決策の一つは次のようになります。

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); 
} 
関連する問題