Slide 18
Slide 18 text
© ZOZO, Inc. 18
var threads = [pthread_t?](repeating: nil, count: 3)
// pthread_attr_t: スタックサイズ、スケジューリングポリシー、
// デタッチ状態などを指定
var attr = pthread_attr_t()
let lock = NSLock()
let urls = [myURL, favoriteURL, repostURL]
// スレッド属性の初期化
pthread_attr_init(&attr)
for (i, url) in urls.enumerated() {
// Box を retain してスレッドへ所有権を渡す
// スレッド側で takeRetainedValue で解放
let box = Box(url: url, lock: lock)
let unmanaged = Unmanaged.passRetained(box)
let result = pthread_create(
&threads[i], // 作成したスレッドIDを格納
&attr, // スレッド属性
pthread_worker_entry, // C互換の関数ポインタ
unmanaged.toOpaque() // スレッドに渡す引数
// BoxをUnmanaged経由でポインタ化
)