{
EnterCriticalSection(&cs);
//全局资源操作
LeaveCriticalSection(&cs);
}
void Thread2
{
while(true)
{
EnterCriticalSection(&cs);
//全局资源操作
LeaveCriticalSection(&cs);
}
}
这2个线程启动后,Thread1至多只能运行一次,全被Thread2抢去了,如何控制优先级,让Thread2里的LeaveCriticalSection(&cs);后让Thread1里的EnterCriticalSection(&cs)响应,而不是Thread2里的。
20 个解决方案
#1
让Thread2用Sleep可以,但这样似乎不是好的编程风格吧
#2
自己再顶一下,加个标记值也行,但会造成Thread2一段时间的无限循环,感觉也不是好的编程风格。
#3
WaitForSingleObject
#4
详细点给出例子行么,谢谢
#5
线程调度是OS的事,但是如果你想这样的话,可以进行线程同步
具体可以参考:CreateMutex、WaitForSingleObject
具体可以参考:CreateMutex、WaitForSingleObject
#7
线程的调度由操作系统内核来管理的
#8
BOOL SetThreadPriority(
HANDLE hThread, // handle to the thread
int nPriority // thread priority level
);
//优先级好像不能超过15
HANDLE hThread, // handle to the thread
int nPriority // thread priority level
);
//优先级好像不能超过15
#9
我擦。。。你这线程函数进入关键段再退出函数就结束了啊,当然只有一次了
#10
正解
8楼以上包括8楼的目的都很单纯,就是为了得分,根本不看问题。
#11
表达的是有问题,9楼说的很正确
void Thread1
{
while(true)
{
accept();//这里有个阻塞函数如accept,recv之类的
EnterCriticalSection(&cs);
//全局资源操作
LeaveCriticalSection(&cs);
}
}
Thread1在阻塞函数执行完成之后,下面也不会执行到,全被Thread2抢去了
#12
应该是你的accept阻塞了。
#13
请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
#14
请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
#15
你怎知道你的Accept执行完毕了??你确定你的Accept返回了??
#16
用InitializeCriticalSectionAndSpinCount代替InitializeCriticalSection,用法MSDN
#17
我跟踪执行过
#18
http://topic.csdn.net/u/20110704/17/a5aa88fd-cb2b-42ed-9560-676c17e5ede5.html
似乎跟我的问题没什么联系,而且单核cpu是无效的
#19
能把两个线程的 进入临界区的
EnterCriticalSection(&cs);
附近的代码提出来没,照目前的情况来看,你的程序应该不会出现独占现象。需要详细的代码。
#20
我执行过几十次,Thread1临界区内的操作,会执行1-2次吧,按我的程序设计要求,Thread1里的操作需要执行5次,所以想怎么控制进入临界区的顺序
#21
#1
让Thread2用Sleep可以,但这样似乎不是好的编程风格吧
#2
自己再顶一下,加个标记值也行,但会造成Thread2一段时间的无限循环,感觉也不是好的编程风格。
#3
WaitForSingleObject
#4
详细点给出例子行么,谢谢
#5
线程调度是OS的事,但是如果你想这样的话,可以进行线程同步
具体可以参考:CreateMutex、WaitForSingleObject
具体可以参考:CreateMutex、WaitForSingleObject
#6
#7
线程的调度由操作系统内核来管理的
#8
BOOL SetThreadPriority(
HANDLE hThread, // handle to the thread
int nPriority // thread priority level
);
//优先级好像不能超过15
HANDLE hThread, // handle to the thread
int nPriority // thread priority level
);
//优先级好像不能超过15
#9
我擦。。。你这线程函数进入关键段再退出函数就结束了啊,当然只有一次了
#10
正解
8楼以上包括8楼的目的都很单纯,就是为了得分,根本不看问题。
#11
表达的是有问题,9楼说的很正确
void Thread1
{
while(true)
{
accept();//这里有个阻塞函数如accept,recv之类的
EnterCriticalSection(&cs);
//全局资源操作
LeaveCriticalSection(&cs);
}
}
Thread1在阻塞函数执行完成之后,下面也不会执行到,全被Thread2抢去了
#12
应该是你的accept阻塞了。
#13
请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
#14
请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
#15
你怎知道你的Accept执行完毕了??你确定你的Accept返回了??
#16
用InitializeCriticalSectionAndSpinCount代替InitializeCriticalSection,用法MSDN
#17
我跟踪执行过
#18
http://topic.csdn.net/u/20110704/17/a5aa88fd-cb2b-42ed-9560-676c17e5ede5.html
似乎跟我的问题没什么联系,而且单核cpu是无效的
#19
能把两个线程的 进入临界区的
EnterCriticalSection(&cs);
附近的代码提出来没,照目前的情况来看,你的程序应该不会出现独占现象。需要详细的代码。
#20
我执行过几十次,Thread1临界区内的操作,会执行1-2次吧,按我的程序设计要求,Thread1里的操作需要执行5次,所以想怎么控制进入临界区的顺序