博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何确保一个函数的被调用次数不少于另外一个函数的被调用次数?
阅读量:4140 次
发布时间:2019-05-25

本文共 5292 字,大约阅读时间需要 17 分钟。

        这是个有趣的问题,直接上代码:

#include 
#include
HANDLE g_h1 = NULL;HANDLE g_h2 = NULL;int g_m = 0;int g_n = 0;void init(){ g_h1 = CreateSemaphore(NULL, 1, 1, NULL); g_h2 = CreateSemaphore(NULL, 0, 100, NULL);}void addToQueque(){ WaitForSingleObject(g_h1, INFINITE); cout << "addToQueque--------->" << ++g_m << endl; ReleaseSemaphore(g_h1, 1, NULL); ReleaseSemaphore(g_h2, 1, NULL);}void delFromQueue(){ WaitForSingleObject(g_h1, INFINITE); WaitForSingleObject(g_h2, INFINITE); cout << "delFromQueue : " << ++g_n << endl; ReleaseSemaphore(g_h1, 1, NULL);}DWORD WINAPI ThreadProc1(LPVOID pVoid){ int i = 0; for(i = 0; i < 100; i++) { addToQueque(); } return 0;}DWORD WINAPI ThreadProc2(LPVOID pVoid){ int i = 0; for(i = 0; i < 100; i++) { delFromQueue(); } return 0;}int main(){ init(); HANDLE hThread[2] = {0}; hThread[0] = CreateThread(NULL, 0, ThreadProc1, NULL, 0, NULL); hThread[1] = CreateThread(NULL, 0, ThreadProc2, NULL, 0, NULL); CloseHandle(hThread[0]); CloseHandle(hThread[1]); Sleep(1000); // 千千万万不要放在return 0;语句的上一行 CloseHandle(g_h1); CloseHandle(g_h2); return 0;}

      结果(有可能每次运行的结果都不一样哈):

addToQueque--------->1

addToQueque--------->2
delFromQueue : 1
addToQueque--------->3
delFromQueue : 2
addToQueque--------->4
delFromQueue : 3
addToQueque--------->5
delFromQueue : 4
addToQueque--------->6
delFromQueue : 5
addToQueque--------->7
delFromQueue : 6
addToQueque--------->8
delFromQueue : 7
delFromQueue : 8
addToQueque--------->9
delFromQueue : 9
addToQueque--------->10
delFromQueue : 10
addToQueque--------->11
delFromQueue : 11
addToQueque--------->12
delFromQueue : 12
addToQueque--------->13
delFromQueue : 13
addToQueque--------->14
delFromQueue : 14
addToQueque--------->15
delFromQueue : 15
addToQueque--------->16
delFromQueue : 16
addToQueque--------->17
delFromQueue : 17
addToQueque--------->18
delFromQueue : 18
addToQueque--------->19
delFromQueue : 19
addToQueque--------->20
delFromQueue : 20
addToQueque--------->21
delFromQueue : 21
addToQueque--------->22
delFromQueue : 22
addToQueque--------->23
delFromQueue : 23
addToQueque--------->24
delFromQueue : 24
addToQueque--------->25
delFromQueue : 25
addToQueque--------->26
delFromQueue : 26
addToQueque--------->27
delFromQueue : 27
addToQueque--------->28
delFromQueue : 28
addToQueque--------->29
delFromQueue : 29
addToQueque--------->30
delFromQueue : 30
addToQueque--------->31
delFromQueue : 31
addToQueque--------->32
delFromQueue : 32
addToQueque--------->33
delFromQueue : 33
addToQueque--------->34
delFromQueue : 34
addToQueque--------->35
delFromQueue : 35
addToQueque--------->36
delFromQueue : 36
addToQueque--------->37
delFromQueue : 37
addToQueque--------->38
delFromQueue : 38
addToQueque--------->39
delFromQueue : 39
addToQueque--------->40
delFromQueue : 40
addToQueque--------->41
delFromQueue : 41
addToQueque--------->42
delFromQueue : 42
addToQueque--------->43
delFromQueue : 43
addToQueque--------->44
delFromQueue : 44
addToQueque--------->45
delFromQueue : 45
addToQueque--------->46
delFromQueue : 46
addToQueque--------->47
delFromQueue : 47
addToQueque--------->48
delFromQueue : 48
addToQueque--------->49
delFromQueue : 49
addToQueque--------->50
delFromQueue : 50
addToQueque--------->51
delFromQueue : 51
addToQueque--------->52
delFromQueue : 52
addToQueque--------->53
delFromQueue : 53
addToQueque--------->54
delFromQueue : 54
addToQueque--------->55
delFromQueue : 55
addToQueque--------->56
delFromQueue : 56
addToQueque--------->57
delFromQueue : 57
addToQueque--------->58
delFromQueue : 58
addToQueque--------->59
delFromQueue : 59
addToQueque--------->60
delFromQueue : 60
addToQueque--------->61
delFromQueue : 61
addToQueque--------->62
delFromQueue : 62
addToQueque--------->63
delFromQueue : 63
addToQueque--------->64
delFromQueue : 64
addToQueque--------->65
delFromQueue : 65
addToQueque--------->66
delFromQueue : 66
addToQueque--------->67
delFromQueue : 67
addToQueque--------->68
delFromQueue : 68
addToQueque--------->69
delFromQueue : 69
addToQueque--------->70
delFromQueue : 70
addToQueque--------->71
delFromQueue : 71
addToQueque--------->72
delFromQueue : 72
addToQueque--------->73
delFromQueue : 73
addToQueque--------->74
delFromQueue : 74
addToQueque--------->75
delFromQueue : 75
addToQueque--------->76
delFromQueue : 76
addToQueque--------->77
delFromQueue : 77
addToQueque--------->78
delFromQueue : 78
addToQueque--------->79
delFromQueue : 79
addToQueque--------->80
delFromQueue : 80
addToQueque--------->81
delFromQueue : 81
addToQueque--------->82
delFromQueue : 82
addToQueque--------->83
delFromQueue : 83
addToQueque--------->84
delFromQueue : 84
addToQueque--------->85
delFromQueue : 85
addToQueque--------->86
delFromQueue : 86
addToQueque--------->87
delFromQueue : 87
addToQueque--------->88
delFromQueue : 88
addToQueque--------->89
delFromQueue : 89
addToQueque--------->90
delFromQueue : 90
addToQueque--------->91
delFromQueue : 91
addToQueque--------->92
delFromQueue : 92
addToQueque--------->93
delFromQueue : 93
addToQueque--------->94
delFromQueue : 94
addToQueque--------->95
delFromQueue : 95
addToQueque--------->96
delFromQueue : 96
addToQueque--------->97
delFromQueue : 97
addToQueque--------->98
delFromQueue : 98
addToQueque--------->99
delFromQueue : 99
addToQueque--------->100
delFromQueue : 100

转载地址:http://dprvi.baihongyu.com/

你可能感兴趣的文章
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>