应用层的一个自旋锁
麻烦大家给我看看 代码是否还存在不足和问题
- #define 0x01 BLOCK_OK
- #define 0x02 BLOCK_EXIT
- #define 0x00 NOT_BLOCK
- m_lock.l_ber = 0;
- m_lock.status = NOT_BLOCK;
- struct __lock{
- unsigned char status; //锁定的状态
- unsigned char l_ber; //锁定的个数
- unsigned char u_ber; //解锁的标示
- };
- struct __lock m_lock;
- void Unlock()
- {
- --m_lock.l_ber;
- if( m_lock.l_ber == 0 )
- {
- Sleep(0);
- }
- ++m_lock.u_ber;
- m_lock.status = m_lock.status & (~BLOCK_OK);
- }
- char Lock()
- {
- ++m_lock.l_ber;
- char l_ber = m_lock.l_ber;
- if( (m_lock.status & BLOCK_OK) == BLOCK_OK && m_lock.l_ber > 0 )
- {
- LockCf:NULL;
- while((m_lock.status & BLOCK_OK) != BLOCK_OK)
- {
- if( (m_lock.status & BLOCK_EXIT) != BLOCK_EXIT )
- {
- return 0;
- }
- Sleep(0);
- }
- if( l_ber != m_lock.l_ber)
- {
- goto LockCf;
- }
- }
- m_lock.status = m_lock.status | BLOCK_OK;
- return 1;
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这个有必要实现自旋锁吗? 自旋锁
也不能完全说是自旋锁 互斥也说的上 代码有问题么
也不能完全说是自旋锁 互斥也说的上 代码有问题么
加锁与解锁内部应该要保证是原子的吧。
这是用户层的 不用于内核