Как работать с потоками с инструкцией по сборке TSL в Visual C++
#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, она создаст файл "отчет", а затем три потока попытаются записать в него число от 1 до 1000000. но из-за одновременного запуска трех потоков числа записываются в файл нерегулярно. Есть способы, такие как мьютекс и..., чтобы решить эту проблему, но я хочу использовать только инструкцию по сборке "TSL". Я хочу, чтобы эти потоки запускались друг за другом и решали это с помощью инструкции "TSL", а не другими способами.
1 ответ
В многопоточной среде лучше использовать блокированные, и вы избегаете добавления файлов.asm в основном для кода x64.