[code]
EnterCriticalSection(&g_cs);
it = listUrl.begin();
...省略
listUrl.pop_front();
LeaveCriticalSection(&g_cs);
[/code]我是否可以把上面代码改成下面的[code]
EnterCriticalSection(&g_cs);
if(listUrl.empty())
{
LeaveCriticalSection(&g_cs);
return;
}
it = listUrl.begin();
...省略
listUrl.pop_front();
LeaveCriticalSection(&g_cs);
[/code]这样是否就可以解决listUrl为1的时候,多个线程取到一样的值,或者有没有别的办法
EnterCriticalSection(&g_cs);
it = listUrl.begin();
...省略
listUrl.pop_front();
LeaveCriticalSection(&g_cs);
[/code]我是否可以把上面代码改成下面的[code]
EnterCriticalSection(&g_cs);
if(listUrl.empty())
{
LeaveCriticalSection(&g_cs);
return;
}
it = listUrl.begin();
...省略
listUrl.pop_front();
LeaveCriticalSection(&g_cs);
[/code]这样是否就可以解决listUrl为1的时候,多个线程取到一样的值,或者有没有别的办法
it = listUrl.begin();
data.ID = (*it).ID;
......................
listUrl.pop_front();
LeaveCriticalSection(&g_cs);上面的代码下面的代码 EnterCriticalSection(&g_cs);
if(listUrl.empty())
return;
it = listUrl.begin();
listUrl.pop_front();
LeaveCriticalSection(&g_cs);listUrl为list<>类型
但这不能解决多个线程取到一样的值的问题
if(listUrl.empty())
return;
it = listUrl.begin();
listUrl.pop_front();
LeaveCriticalSection(&g_cs); 你的llistUrl.empty())并不空啊,还有一个值,所以还是跟上面的一样
比较有效的方法是你用个数组,记录哪个值已经被取过了.
while(!listUrl.empty())
{
.................
EnterCriticalSection(&g_cs);
it = listUrl.begin();
data.ID = (*it).ID;
......................
listUrl.pop_front();
LeaveCriticalSection(&g_cs); 是这样的,现在就是多线程的问题,2个线程同时进来,listUrl个数为1的时候,2个线程同时取到了一样的值
EnterCriticalSection(&g_cs);
.............
LeaveCriticalSection(&g_cs);
中的内容只能同时一个线程进来吗?
if(listUrl.empty())
return; 到底能不能这样用啊?还是要 ??????
EnterCriticalSection(&g_cs);
if(listUrl.empty())
{
LeaveCriticalSection(&g_cs);
return;
}还有没有别的方法?
if(!listUrl.empty()) {
it = listUrl.begin();
listUrl.pop_front();
}
LeaveCriticalSection(&g_cs);