Changeset 2547 for XIOS3/trunk/src/manager/token_manager.hpp
- Timestamp:
- 08/29/23 17:24:04 (10 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/manager/token_manager.hpp
r2498 r2547 26 26 memset( winBufferRetrieved_, 0, windowSize ); 27 27 } 28 MPI_Win_lock_all(0, winCurrentToken_) ; 29 MPI_Win_lock_all(0, winRetrievedToken_) ; 28 30 } 29 31 32 ~CTokenManager() 33 { 34 MPI_Win_unlock_all(winCurrentToken_) ; 35 MPI_Win_unlock_all(winRetrievedToken_) ; 36 MPI_Win_free(&winCurrentToken_) ; 37 MPI_Win_free(&winRetrievedToken_) ; 38 } 39 30 40 size_t getToken(void) 31 41 { 32 42 size_t inc=1 ; 33 43 size_t token ; 34 MPI_Win_lock(MPI_LOCK_EXCLUSIVE, leader_, 0, winCurrentToken_) ;35 44 MPI_Fetch_and_op(&inc, &token, MPI_SIZE_T, leader_, 0, MPI_SUM, winCurrentToken_) ; 36 MPI_Win_ unlock(leader_, winCurrentToken_);45 MPI_Win_flush(leader_, winCurrentToken_); 37 46 return token ; 38 47 } 39 48 40 bool lockToken(size_t token)49 bool checkToken(size_t token) 41 50 { 42 51 size_t tokenRead ; 43 MPI_Win_lock(MPI_LOCK_SHARED, leader_, 0, winRetrievedToken_) ; 44 MPI_Get(&tokenRead, 1, MPI_SIZE_T, leader_, 0, 1, MPI_SIZE_T, winRetrievedToken_ ) ; 45 MPI_Win_unlock(leader_, winRetrievedToken_) ; 46 if (token==tokenRead) return true ; 47 else return false ; 52 size_t inc=0 ; 53 MPI_Fetch_and_op(&inc, &tokenRead, MPI_SIZE_T, leader_, 0, MPI_NO_OP, winRetrievedToken_) ; 54 MPI_Win_flush(leader_, winRetrievedToken_); 55 return tokenRead==token ; 48 56 } 49 50 void unlockToken(size_t token) 57 58 void updateToken(size_t token) 59 { 60 size_t inc=1 ; 61 size_t tokenRead ; 62 MPI_Fetch_and_op(&inc, &tokenRead, MPI_SIZE_T, leader_, 0, MPI_SUM, winRetrievedToken_) ; 63 MPI_Win_flush(leader_, winRetrievedToken_); 64 if (token!=tokenRead) ERROR("void CTokenManager::unlockToken(size_t token)",<<"Cannot release token="<<token<< 65 " that is not corresponding to the locked token="<<tokenRead) ; 66 } 67 /* void unlockToken(size_t token) 51 68 { 52 69 size_t inc=1 ; … … 59 76 " that is not corresponding to the locked token="<<tokenRead) ; 60 77 } 61 78 */ 62 79 private: 63 80
Note: See TracChangeset
for help on using the changeset viewer.