#include <Windows.h>
#include <process.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;
ofstream myfile;
unsigned int __stdcall mythreadA(void* data)
{
for (int i = 0; i < 1000000; i++)
{
myfile << "aa";
myfile << i;
myfile << "n";
}
return 0;
}
int main(int argc, char* argv[])
{
myfile.open ("report.txt");
HANDLE myhandleA, myhandleB,myhandleC;
myhandleA = (HANDLE)_beginthreadex(0, 0, &mythreadA, 0, 0, 0);
myhandleB = (HANDLE)_beginthreadex(0, 0, &mythreadA, 0, 0, 0);
myhandleC = (HANDLE)_beginthreadex(0, 0, &mythreadA, 0, 0, 0);
getchar();
myfile.close();
return 0;
}
如果我们在Microsoft visual studio中运行这个程序,它会创建一个文件"report",然后三个线程尝试从1到1000000写入该文件。但是由于三个线程并发运行,写入文件的数字是不规则的。有一些方法,比如互斥和…要解决这个问题,但我只想使用一个汇编指令"TSL"。我想让这些线程在彼此之后运行,并通过"TSL"指令而不是其他方式解决这个问题。
在多线程环境中,最好使用互锁的文件,避免主要为x64代码添加.asm文件。