2 * Copyright (C) 2017 Cisco Inc.
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License, version 2,
6 * as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 // @author Changxue Deng <chadeng@cisco.com>
26 // multiple-thread/process reader/writer lock
38 // Writer/reader unlock
41 inline int TryWrLock();
43 void Init(pthread_rwlock_t *rw_lock);
46 // a global lock variable
47 static pthread_rwlock_t mb_rw_lock;
49 pthread_rwlock_t *mb_rw_lock_ptr;
52 inline int MBLock::WrLock()
54 if(mb_rw_lock_ptr == NULL)
56 return pthread_rwlock_wrlock(mb_rw_lock_ptr);
59 inline int MBLock::RdLock()
61 if(mb_rw_lock_ptr == NULL)
63 return pthread_rwlock_rdlock(mb_rw_lock_ptr);
66 inline int MBLock::UnLock()
68 if(mb_rw_lock_ptr == NULL)
70 return pthread_rwlock_unlock(mb_rw_lock_ptr);
73 inline int MBLock::TryWrLock()
75 if(mb_rw_lock_ptr == NULL)
77 return pthread_rwlock_trywrlock(mb_rw_lock_ptr);