Prefix trie insert и многопоточность

185
05 февраля 2018, 05:28

Я хочу попытаться получить счетчик слов на основе префикса trie. Но у меня есть некоторые проблемы. Он хорошо работает на простой вставке, но когда я использую потоки, все еще пуст.

Я пытаюсь использовать мьютекс, но он не работает.

Я использую cpp14 и cLion:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -pthread")

My main.cpp

  place with threads...
        for (int i = 1; i < 21; i++) {
        std::thread threads1(countFile, i);
        i++;
        std::thread threads2(countFile, i);
        threads1.detach();
        threads2.detach();
       }
  some code here...
//call file
void countFile(int str){
  std::ifstream in(str + '.txt');  // pseudokod 
  std::string li;
  while (std::getline(in, li)) {
    go(li); 
  }
}
//call insert
void go(std::string str){
     trie.insert(str);
}

My trie.hpp insert

void trie::insert(const std::string& str) {
trie_node* root = m_root;
const char* sptr = str.c_str();
while(*sptr){
    char c = *sptr;
    int id = c - 1;
    if(root->children[id] == nullptr ){
        trie_node *node = new trie_node();
        node->payload = *sptr;
        root->children[id] = node;
        node->parent = root;
    }
    root = root->children[id];
    sptr++;
}
root->is_terminal = true;
root->ctr_terminal++;
}
READ ALSO
Оператор delete в деструкторах

Оператор delete в деструкторах

Подскажите пожалуйста, я правильно понимаю, что этот оператор в деструкторе используется только применительно к атрибутам, являющимися...

206
c++ телефонный номер [требует правки]

c++ телефонный номер [требует правки]

Телефонный номер называют "шахматным", если его цифры набирают на кнопочной панели телефона ходом шахматного коня

218
Java. JFrame, pack(), setResizable()

Java. JFrame, pack(), setResizable()

Здравствуйте!

202