一个很简单的读写锁模型,请高手帮忙看上会不会死锁,或者有哪些需要改进的地方

一个很简单的读写锁模型,请高手帮忙看下会不会死锁,或者有哪些需要改进的地方?
cs为临界段,inc和dec为线程安全的累加和累减,readers为读者数。

读者:
{
  cs.lock();
  inc(readers);
  cs.unlock();

  任务代码;

  dec(readers);
}

写者:
{
  cs.lock();
  while (readers > 0)
  {
    Sleep(1);
  }

  任务代码;

  cs.unlock();
}

1.有发生死锁的可能吗?
2.Sleep(1)那个地方觉得不太好,有什么更好的办法吗?这样改进行不行?

event为手动事件。
读者:
{
  cs.lock();
  inc(readers);
  cs.unlock();

  任务代码;

  dec(readers);
  SetEvent(event);
}

写者:
{
  cs.lock();
  while (readers > 0)
  {
    WaitEvent(event);
    ResetEvent(event);
  }

  任务代码;

  cs.unlock();
}
------解决方案--------------------
1. 不会发生死锁。
2. 用Sleep(1)这种轮询的方式来等待肯定不是太好。
读者写者问题是多线程同步的经典问题,楼主可以参考我写的二篇文章:
《秒杀多线程第十一篇 读者写者问题》
http://blog.****.net/morewindows/article/details/7596034
《秒杀多线程第十四篇 读者写者问题继 读写锁SRWLock》
http://blog.****.net/morewindows/article/details/7650574
------解决方案--------------------
1.不会

2.
结合第二种方法,有一个函数叫做WaitForSingleObject。
解决楼主while这种情况的。(楼主这种情况消耗CPU太厉害了)