putStrLn
numaralı çağıran birden fazla iş parçacığım varsa, herhangi bir eşzamanlılık denetimi olmadan iş parçacıklarının çıktısının araya girebileceğini biliyorum.putStrLn iş parçacığı güvenli midir?
Sorunuz putStrLn
iş parçacığı bu çıkışlı iş parçacığı mıdır?
putStrLn
arabelleğe alınmış bir yazma işlemi olduğunu farz ediyorum, bu nedenle, iki iş parçacığının aynı anda putStrLn
numaralı aramasını çağırarak, çıktı arabelleğindeki herhangi bir bozulmanın ortaya çıkıp çıkmayacağını sorun.
Ve genel olarak, Haskell'in (gerçekten GHC'ler) diğer "standart I/O" işlevlerinin iplik güvenliği hakkında neler söylenebilir? Özellikle, tamponlanmış okuma işlemlerinden herhangi biri için aynı karakterin aynı anda aynı okuma çağrısı yapan iki farklı dişe geri dönmesi mümkün mü?
Stdout çıktısı iş parçacığı güvenli olmayan bir kütüphaneyi (sanırım her zamanki C/C++ çalışma zamanlarını, C#, Java vb.) Düşündüğümü sanmıyorum. Tahmin et, benim de burada sorun yok diyorum. +1 iyi bir soru olsa da. – Mehrdad
Linux 'putStrLn' ve arkadaşları [' write'] (http://linux.die.net/man/2/write) ve ['select'] (http://linux.die.net/man) aracılığıyla uygulandı./2/select) sabit uzunlukta bloklar için çift (satır veya blok tamponlama ile), yani soru 'yazma'ın iplik güvenli olup olmadığıdır. POSIX, 'write' için (1003.1-2001: 2.9.1 & 2.9.7) iş parçacığı güvenliği gerektirir ve genellikle budur. – JJJ
Ve 'MVar' kilitleri [' futex'] ile uygulandı (http://linux.die.net/man/4/futex) ('threaded' çalışma zamanı ile). @ Shachaf cevabı doğrudur. – JJJ