1、内核态常用锁
A、struct mutex m_stMutex;
说明:该锁可以睡眠
mutex_init(&m_stMutex);mutex_lock(&m_stMutex);mutex_unlock(&m_stMutex);
B、其他待更新
2、用户态锁
A、文件锁
说明:适应于进程间保护临界资源;文件XX_LOCKFILE需要读写权限。
使用:
#define XX_LOCKFILE"/etc/.xxLock"
INT g_iLockFd = open(XX_LOCKFILE, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
VOID _XX_Lock(INT iFd, SHORT sType)
{
//入参判断
struck flock stLock;
memset(&stLock, 0, sizeof(stLock));
stLock.l_type = sType;
stLock.l_whence = SEEK_SET;
stLock.l_start = 0;
stLock.l_len = 0;
if(0 > fcntl(iFd, F_SETLKW, &stLock))
{
//TO DO
}
return;
}
VOID _XX_UnLock(INT iFd)
{
//入参判断
struck flock stLock;
memset(&stLock, 0, sizeof(stLock));
stLock.l_type = F_UNLCK;
stLock.l_whence = SEEK_SET;
stLock.l_start = 0;
stLock.l_len = 0;
if(0 > fcntl(iFd, F_SETLKW, &stLock))
{
//TO DO
}
return;
}
VOID XX_ReadLock(INT iFd)
{
//入参判断
_XX_Lock(INT iFd, F_RDLCK);
}
VOID XX_WriteLock(INT iFd)
{
//入参判断
_XX_Lock(INT iFd, F_WRLCK);
}
VOID XX_ReadUnLock(INT iFd)
{
//入参判断
_XX_UnLock(INT iFd);
}
VOID XX_WriteUnLock(INT iFd)
{
//入参判断
_XX_UnLock(INT iFd);
}
B、线程锁
说明:适应于某个进程的线程间临界资源保护
使用:
pthread_mutex_t m_stMutex=PTHREAD_MUTEX_INITIALIZER;
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex) //锁已经被占据时返回EBUSY而不是挂起等待。
int pthread_mutex_destroy(pthread_mutex_t *mutex)