Semaphore用在多线程的问题

heart33k heart33k 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
private Semaphore m_Write = new Semaphore(50, 50, "WriteMap");
private Semaphore m_Read = new Semaphore(0, 50, "ReadMap");
private Queue q = new Queue();

public void Push_back(ref string str)
{
m_Write.WaitOne();
q.Enqueue(str);
m_Read.Release();
}
public bool Pop_front(out string s)
{
if (m_Read.WaitOne(10))
{
s = (string)q.Dequeue();
m_Write.Release();
return true;
}
s = null;
return false;
}
一个线程调用Push_back存数据,另一个线程调用Pop_front取数据,有时候可能全部数据读取出来,有时候会少一个或者多个,用q.Count能获取到元素个数不为0,但就是读不出来

public bool Pop_front(out string s)
{
if (q.Count > 0)
{
m_Read.WaitOne();
s = (string)q.Dequeue();
m_Write.Release();
return true;
}
s = null;
return false;
}
如果改为这样的话,就没问题了
为什么会这样呢,难道是m_Read.WaitOne(10)不可靠吗?
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
heart33k
C# 111,128 成员 642,536 内容