m323/Sources/Aufgabe6/extraUnsafe.swift
cediackermann 52525c4045
Aufgabe6: add extra exercises, remove Third runner
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 12:06:16 +02:00

95 lines
1.9 KiB
Swift

import Foundation
@main
struct App {
static func main() {
class Warehouse {
var stock: Int = 10
}
let warehouse = Warehouse()
let semStartB = DispatchSemaphore(value: 0)
let semBFinishedRead = DispatchSemaphore(value: 0)
let semAFinishedCart = DispatchSemaphore(value: 0)
let semBFinishedUpdate = DispatchSemaphore(value: 0)
let semDone = DispatchSemaphore(value: 0)
Thread.detachNewThread {
let localStockA = warehouse.stock
print("Thread A liest den Lagerbestand (\(localStockA) Stück)")
semStartB.signal()
semBFinishedRead.wait()
print("Thread A legt Smartphone in den Warenkorb")
let newStockA = localStockA - 1
semAFinishedCart.signal()
semBFinishedUpdate.wait()
warehouse.stock = newStockA
print(
"Thread A aktualisiert den Lagerbestand auf \(warehouse.stock) Stück (\(localStockA) Stück - 1 Stück)"
)
semDone.signal()
}
Thread.detachNewThread {
semStartB.wait()
let localStockB = warehouse.stock
print("Thread B liest den Lagerbestand (\(localStockB) Stück)")
print("Thread B legt 2 Smartphones in den Warenkorb")
let newStockB = localStockB - 2
semBFinishedRead.signal()
semAFinishedCart.wait()
warehouse.stock = newStockB
print(
"Thread B aktualisiert den Lagerbestand auf \(warehouse.stock) Stück (\(localStockB) Stück - 2 Stück)"
)
semBFinishedUpdate.signal()
semDone.signal()
}
semDone.wait()
semDone.wait()
print("Endgültiger Lagerbestand im System: \(warehouse.stock) Stück")
}
}