我想用不同的設置在不同的std::threads
中運行Fortran90函數,該函數使用許多模塊來存儲設置和一些常規數據。我看到的問題是,Fortran模塊就像單身對象。當我用兩個線程調用函數時,它們在同一個模塊上工作。有沒有辦法讓模塊threadprivate像openmp一樣?在std :: thread中使用C++中的Fortran模塊
例如使用OpenMP與線程專用數據的模塊如下:
MODULE EXAMPLE
USE OMP_LIB
! some threadprivate data:
INTEGER :: VALUE = 0
! make value threadprivate.
!$OMP THREADPRIVATE(VALUE)
CONTAINS
END MODULE EXAMPLE
我可以做的std::thread
類似的東西?
沒有標準可以涵蓋這個,但至少在某些ELF系統(最着名的是Linux)中,GNU OpenMP運行時和'std :: thread'都使用ELF TLS來存儲線程局部變量。因此,OpenMP線程專用變量在C++線程中也是線程本地的。再一次,這既不標準也不便攜。 –
請注意,即使在Linux上,運行時間也不僅僅是GOMP。它們可能與此功能兼容,但它們通常不兼容。但是C++線程很可能在OpenMP線程的同一底層(例如POSIX線程)之上實現,這很自然。 –