Как работать с потоками с инструкцией по сборке 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.

Другие вопросы по тегам