多线程 - 如果满足条件,如何停止所有线程?

时间:2016-10-31 14:47:28

标签: c multithreading

编辑:我不能使用互斥或​​睡眠()或任何类型的等待,因为我们对C中的线程相当新。

对于我的任务,我要使用线程制作一个强力密码破解程序。我的想法是我有密码的哈希和盐,所以我使用字母AZ,az,0-9的组合,并使用crypt_r函数加密它,并将其与我的哈希和盐进行比较。

我创建了2个线程,一个只检查小写字母,另一个检查字母表中的所有字母。

我的问题是,一旦小写线程找到密码就会给它,但第二个线程继续在后台运行。

如何在不使用任何全局变量的情况下停止第二个线程?

以下是我如何进行线程连接:

for (int i = 0; i < nbThread; ++i) {
    pthread_join(tabThread[i], NULL);
    pthread_join(tabThread2[i], NULL);
}

感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:1)

嗯,你有pthread_cancel这是告诉线程退出时间的好方法。线程需要知道取消的可能性,并适当地处理它。

然后你用pthread_killl杀死线程的方法并不是很好。请注意,使用pthread_kill可能会导致资源泄漏。

答案 1 :(得分:0)

除非您想在线程退出后执行某些操作,否则 不能使用pthread_exit()调用。这是一种便利功能,而非必需品。您可以让主线程退出pthead_join()(没有任何_exit()调用),其他两个线程可以继续,直到它们中的任何一个成功。如果你的任何一个线程找到了密码,那么你可以简单地退出(使用_Exit()<body> <script> function problem551() { var img = document.getElementById('img551'); img.style.display = img.style.display === 'block' ? 'none' : 'block'; } </script> <div> <button onclick="problem551()" >PROBLEM 551</button> <img src="PROBLEM551.png" id="img551"> <p id="p551"></p> </div> </body> )进程,而另一个线程自然会在进程退出时终止。