应用层的一个自旋锁

发布于 2022-10-15 08:49:47 字数 4498 浏览 26 评论 0

麻烦大家给我看看     代码是否还存在不足和问题

  1. #define         0x01     BLOCK_OK
  2. #define         0x02     BLOCK_EXIT
  3. #define         0x00     NOT_BLOCK
  4. m_lock.l_ber    = 0;
  5. m_lock.status  = NOT_BLOCK;
  6. struct __lock{
  7.                 unsigned char      status;               //锁定的状态
  8.                 unsigned char      l_ber;                //锁定的个数
  9.                 unsigned char      u_ber;                //解锁的标示
  10.         };
  11.         struct __lock          m_lock;
  12.                 void Unlock()
  13.         {
  14.                 --m_lock.l_ber;
  15.                 if( m_lock.l_ber == 0 )
  16.                 {
  17.                         Sleep(0);
  18.                 }
  19.                 ++m_lock.u_ber;
  20.                 m_lock.status  = m_lock.status & (~BLOCK_OK);
  21.         }
  22.         char Lock()
  23.         {
  24.                 ++m_lock.l_ber;
  25.                 char l_ber    = m_lock.l_ber;
  26.                 if( (m_lock.status & BLOCK_OK) == BLOCK_OK && m_lock.l_ber > 0 )
  27.                 {                       
  28.                         LockCf:NULL;
  29.                         while((m_lock.status & BLOCK_OK) != BLOCK_OK)
  30.                         {
  31.                                 if( (m_lock.status & BLOCK_EXIT) != BLOCK_EXIT )
  32.                                 {
  33.                                         return 0;
  34.                                 }
  35.                                 Sleep(0);
  36.                         }
  37.                         if( l_ber != m_lock.l_ber)
  38.                         {
  39.                                 goto LockCf;
  40.                         }
  41.                 }
  42.                 m_lock.status        = m_lock.status | BLOCK_OK;
  43.                 return 1;
  44.         }

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

难忘№最初的完美 2022-10-22 08:49:47

这个有必要实现自旋锁吗? 自旋锁

木有鱼丸 2022-10-22 08:49:47

也不能完全说是自旋锁      互斥也说的上    代码有问题么

挽清梦 2022-10-22 08:49:47

也不能完全说是自旋锁      互斥也说的上    代码有问题么

对风讲故事 2022-10-22 08:49:47

加锁与解锁内部应该要保证是原子的吧。

物价感观 2022-10-22 08:49:47

这是用户层的    不用于内核

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文