/ / Korupcja pamięci współbieżności przy użyciu Boost 1.55 Thread and Filesystem (Visual Studio 2013) - c ++, wielowątkowość, doładowanie, współbieżność, systemy plików

Korupcja pamięci współbieżności za pomocą Boost 1.55 Thread and Filesystem (Visual Studio 2013) - c ++, wielowątkowość, doładowanie, współbieżność, systemy plików

Mam następujący kod:

#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <thread>

#define BOOST_THREAD_DYN_LINK
#include "boost/filesystem.hpp"
#include "boost/thread/thread.hpp"

using namespace std;

void testEx(std::string & name){
while (1){
boost::filesystem::path perc(name);
if (boost::filesystem::exists(perc))
cout << "yes" << endl;
}
}

int main(){
std::string name = "c:\text.txt";
vector<boost::thread> pool;
for (int i = 0; i < 10;i++)
pool.emplace_back(testEx, name);

while (1){
std::ofstream out(name, std::ios_base::out | std::ios_base::app);
out << "a" << std::endl;
out.close();
}
for (auto & t : pool)
t.join();
}

Głównym wątkiem jest zapisywanie pliku. W wątkach potomnych sprawdzam, czy plik istnieje. Program często zawiesza się z powodu uszkodzenia pamięci w wierszu, w którym utworzę instancję boost :: filesystem :: path.

Jeśli używam std :: thread zamiast boost :: thread program działa poprawnie.

Czy jest coś, co mogę zrobić, aby ten program działał z boost :: thread (wiele starych kodów). Dlaczego to się dzieje?

Odpowiedzi:

0 dla odpowiedzi № 1

Do tej pory rozwiązałem się, łącząc dynamicznie boost :: system plików również

#define BOOST_FILESYSTEM_DYN_LINK

po prostu obejście