您的位置:首页 > 其它

如何确保一个函数的被调用次数不少于另外一个函数的被调用次数?

2013-11-12 23:51 337 查看
        这是个有趣的问题,直接上代码:

#include <windows.h>
#include <iostream.h>

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐