编辑:我不能使用互斥或睡眠()或任何类型的等待,因为我们对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);
}
感谢您的时间和帮助!
答案 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>
)进程,而另一个线程自然会在进程退出时终止。