** 这是针对大学课程的,我实际上并不是在尝试破解密码 ** 下面是我的源代码,但基本上我想要发生的是父进程将密码排入 std::list<> 尝试列表。然后子线程从队列的前面抓取,目前只打印出值。
正如您在下面的代码中看到的那样,我尝试使用 std::mutex 在弹出前端时阻止尝试列表,但是两个线程同时吹过锁并从前端读取。然后其中之一出现分段错误并且程序崩溃。
seg faulting 的具体代码部分是...
mutex.lock();
password = attemptList.front();
attemptList.pop_front();
size = attemptList.size();
std::cout << password << std::endl;
mutex.unlock();
Run Code Online (Sandbox Code Playgroud)
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <string>
#include <iostream>
#include <chrono>
#include <shared_mutex>
#include <unistd.h>
#include <sys/ipc.h>
#include <mutex>
#include <sys/shm.h>
#include <sys/wait.h>
#include <thread>
#include <vector>
#include <algorithm>
#include <list>
#define MAX_LENGTH 4
#define MAX_QUEUE_SIZE 1000
#define CHARACTER_LIST "abcdefghijklmnopqrstuvwxyz"
void enqueue_passwords(const std::string& charList);
void bruteforce();
void do_join(std::thread& t);
void join_all(std::vector<std::thread>& v);
std::list<std::string> …Run Code Online (Sandbox Code Playgroud)