问题描述:
创建两个线程,一个线程打印1,2,3,……,52,另一个线程打印A,B,C,……,Z。要求打印出来的效果为:
1
2
A
3
4
B
……
51
52
Z
交替有序进行。
多线程同步在很多时候有不止一种方法实现。比如这道题既可以用线程间通信,也可以用临界区,都可以达到同样的效果。
方法一:线程间通信
线程1每次打印2个数字,线程2每次打印1个字母。线程1打印完后,通知线程2,并阻塞等待线程2的通知。线程2打印完后,通知线程1,并阻塞等待线程1的通知......直到打印完成。
#include<Windows.h>
#include<stdio.h>
using namespace std;
DWORD WINAPI printNumbers(LPVOID param);
DWORD WINAPI printCharacters(LPVOID param);
//需要用户自己定义消息的ID
//这个ID必须要大于WM_USER,小于WM_USER的已经被系统占用
#define MY_MSG (WM_USER+1)
//打印的数字和字母
int number = 1;
char ch = 'A';
int main()
{
//先获取两个线程的ID
DWORD threadID1 = 0, threadID2 = 0;
//线程1打印数字
HANDLE hThread1 = CreateThread(NULL, 0, printNumbers, (LPVOID)&threadID2, 0, &threadID1);
//线程2打印英文字母
HANDLE hThread2 = CreateThread(NULL, 0, printCharacters, (LPVOID)&threadID1,