2017-01-04 7 views
0

POSIXセマフォや共有シリアルディスパッチキューのような複数のプロセス間で同期が必要です。 OS Xのswiftに似たものがありますか?OSXでの同期の迅速化

+0

'sem_open()'と友人はSwiftで利用できるようですが、あなたはそれを使ってみましたか? –

+0

私はそれらを見逃してしまった。あなたは答えを投稿できますか?それを受け入れるでしょうか? – Jelly

答えて

1

名前付きセマフォは、スウィフトに使用できます。

import Darwin 

var sema = sem_open("/mysema", O_CREAT, 0o666, 0) 
guard sema != SEM_FAILED else { 
    perror("sem_open") 
    exit(EXIT_FAILURE) 
} 

defer { sem_close(sema) } 

print("Waiting for semaphore") 
sem_wait(sema) 
print("Got semaphore") 
0

Martin Rが指摘したように、これはスレッドではなくプロセス間で機能します。

はい、確かにGrand Central Dispatch(GCD)についてはshould readです。またはhere

いいビデオはWWDCでhereです。ここで

hereから取られたセマフォに関する例です:

private func semaphoreExample2() { 
    let semaphore = dispatch_semaphore_create(0) 
    let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 
    dispatch_async(queue) { 
     NSLog("Running async task...") 
     sleep(3) 
     NSLog("Async task completed") 
     dispatch_semaphore_signal(semaphore) 
    } 
    NSLog("Waiting async task...") 
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER) 
    NSLog("Continue!") 
} 

それともhereからスウィフト3内の別の1:

// creating the semaphore with a resource count of 1 
let semaphore  = DispatchSemaphore(value: 1) 
let watchdogTime = DispatchTime.now() + DispatchTimeInterval.seconds(1) 
... 

// synchronize access to a shared resource using the semaphore 
if case .TimedOut = semaphore.wait(timeout: watchdogTime) { 
    print("OMG! Someone was bogarting that semaphore!") 
} 
// begin access shared resource… 
... 

// end access to resource 
semaphore.signal() 
+0

GCDセマフォを異なる*プロセス間で共有することはできますか? –

+0

「プロセス間」の部分が欠落しました:-( –