C#多线程 一个缓冲队列,一个生产者线程,一个消费者线程,这两个线程同时 *** 作这个队列,必须加互斥锁吗

C#多线程 一个缓冲队列,一个生产者线程,一个消费者线程,这两个线程同时 *** 作这个队列,必须加互斥锁吗,第1张

加互斥锁的目的,是解决多线程访问同一资源而产生不可预期的异常,那么你现在是一个线程只负责插入,另一线程负责查询和删除,查询和删除跟插入没有关系的话,那么显然是不需要线程锁的,你要是问隐患的话,那么由于多线程或者多用户的原因,频繁 *** 作几张相关表,可能造成数据库的表死锁

C/C++ code#include <windows.h>

#include <iostream.h>

DWORD WINAPI Fun1Proc(

LPVOID lpParameter // thread data

)

DWORD WINAPI Fun2Proc(

LPVOID lpParameter // thread data

)

int index=0

int tickets=100

HANDLE hMutex

void main()

{

HANDLE hThread1

HANDLE hThread2

hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL)

hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL)

CloseHandle(hThread1)

CloseHandle(hThread2)

//hMutex=CreateMutex(NULL,TRUE,NULL)

hMutex=CreateMutex(NULL,TRUE,"tickets")

if(hMutex)

{

if(ERROR_ALREADY_EXISTS==GetLastError())

{

cout<<"only one instance can run!"<<endl

return

}

}

WaitForSingleObject(hMutex,INFINITE)

ReleaseMutex(hMutex)

ReleaseMutex(hMutex)

Sleep(4000)

}

DWORD WINAPI Fun1Proc(

LPVOID lpParameter // thread data

)

{

/*while(TRUE)

{

WaitForSingleObject(hMutex,INFINITE)

if(tickets>0)

{

Sleep(1)

cout<<"thread1 sell ticket : "<<tickets--<<endl

}

else

break

ReleaseMutex(hMutex)

}

*/

WaitForSingleObject(hMutex,INFINITE)

cout<<"thread1 is running"<<endl

return 0

}

DWORD WINAPI Fun2Proc(

LPVOID lpParameter // thread data

)

{

/*while(TRUE)

{

WaitForSingleObject(hMutex,INFINITE)

if(tickets>0)

{

Sleep(1)

cout<<"thread2 sell ticket : "<<tickets--<<endl

}

else

break

ReleaseMutex(hMutex)

}

*/

WaitForSingleObject(hMutex,INFINITE)

cout<<"thread2 is running"<<endl

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11654314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存