#include <windows.h>
#include <iostream.h>
DWORD WINAPI Funproc1(LPVOID lparameter);
DWORD WINAPI Funproc2(LPVOID LParameter);
int tickets=1000;
CRITICAL_SECTION g_cs;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Funproc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Funproc2,NULL,0,NULL);
InitializeCriticalSection(&g_cs);
Sleep(5000);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Funproc1(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(10);
if(tickets>0)
{
cout<<"thread1 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs); }
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
DWORD WINAPI Funproc2(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(10);
if( tickets>0)
{
cout<<"thread2 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
功能是两个线程实现同步卖出1000张ticksts;
问题:
sleep()的参数不同 卖出的票的张数不就不同 可以试试 程序能运行 小弟刚刚学 不知道是咋回事 望大家指导指导 谢谢ing
#include <iostream.h>
DWORD WINAPI Funproc1(LPVOID lparameter);
DWORD WINAPI Funproc2(LPVOID LParameter);
int tickets=1000;
CRITICAL_SECTION g_cs;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
hThread1=CreateThread(NULL,0,Funproc1,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Funproc2,NULL,0,NULL);
InitializeCriticalSection(&g_cs);
Sleep(5000);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Funproc1(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(10);
if(tickets>0)
{
cout<<"thread1 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs); }
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
DWORD WINAPI Funproc2(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(10);
if( tickets>0)
{
cout<<"thread2 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
功能是两个线程实现同步卖出1000张ticksts;
问题:
sleep()的参数不同 卖出的票的张数不就不同 可以试试 程序能运行 小弟刚刚学 不知道是咋回事 望大家指导指导 谢谢ing
void main()
{
//thread handle array
HANDLE hThread[2];
InitializeCriticalSection(&g_cs); hThread[0]=CreateThread(NULL,0,Funproc1,NULL,0,NULL);
hThread[1]=CreateThread(NULL,0,Funproc2,NULL,0,NULL);
//等待2个线程都结束。
WaitForMultipleObjects(2, hThread, TRUE, -1); DeleteCriticalSection(&g_cs);
}
#include <iostream.h>
DWORD WINAPI Funproc1(LPVOID lparameter);
DWORD WINAPI Funproc2(LPVOID LParameter);
int tickets=1000;
CRITICAL_SECTION g_cs;
void main()
{
InitializeCriticalSection(&g_cs);
HANDLE hThread[2];
hThread[0]=CreateThread(NULL,0,Funproc1,NULL,0,NULL);
hThread[1]=CreateThread(NULL,0,Funproc2,NULL,0,NULL);
Sleep(6000);
WaitForMultipleObjects(2,hThread, TRUE, -1);
//if(tickets>0)
// Sleep(4000);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Funproc1(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(5);
if(tickets>0)
{
Sleep(5);
cout<<"thread1 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs); }
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
DWORD WINAPI Funproc2(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(5);
if( tickets>0)
{
Sleep(5); cout<<"thread2 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
谢谢你
#include <iostream.h>
DWORD WINAPI Funproc1(LPVOID lparameter);
DWORD WINAPI Funproc2(LPVOID LParameter);
int tickets=1000;
CRITICAL_SECTION g_cs;
void main()
{
InitializeCriticalSection(&g_cs);
HANDLE hThread[2];
hThread[0]=CreateThread(NULL,0,Funproc1,NULL,0,NULL);
hThread[1]=CreateThread(NULL,0,Funproc2,NULL,0,NULL);
Sleep(6000);
WaitForMultipleObjects(2,hThread, TRUE, -1);
//if(tickets>0)
// Sleep(4000);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Funproc1(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(5);
if(tickets>0)
{
Sleep(5);
cout<<"thread1 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs); }
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
DWORD WINAPI Funproc2(LPVOID lparameter)
{
while (true)
{
EnterCriticalSection(&g_cs);
Sleep(5);
if( tickets>0)
{
Sleep(5); cout<<"thread2 sell tickets:"<<tickets--<<endl;
LeaveCriticalSection(&g_cs);
}
else
{
LeaveCriticalSection(&g_cs);
break;
}
}
return 0;
}
谢谢你
另外,用WaitForMultipleObjects等待线程结束就不用Sleep了。
你在你机器上试试 我感觉很奇怪 是不是机器的问题呢
谢谢ing
这个问题上学期我就一直在思考 问老师也说不出个所以然 哎 现在的大学啊
还是csdn 好
谢谢你了 以后要是有问题就找你了啊 呵呵