私は非常にリソース集中型のコードを使用しています。そのため、複数のpthreadに分割することができます。私が推測していることは、そのプロセッサコア上の他のプロセスが非常に遅くなり、数秒の実行時間後にクラッシュするということです。リソース集約型マルチスレッドで他のプロセスを殺す
私は既にChromeタブ、Cinnamon DE、さらにはOS全体(カーネル?)のようなランダムなプロセスを強制終了することができました。
コード:(これは遅く、擬似コードやコメントを作成するにはあまりにも疲れました) - しかし、これは無差別なコードです。 CPU IPS。
できるだけ多くのパフォーマンスを維持しながら、これを修正する方法はありますか?
static unsigned int NTHREADS = std::thread::hardware_concurrency();
static int THREAD_COMPLETE = -1;
static std::string PASSWORD = "";
static std::string CHARS;
static std::mutex MUTEX;
void *find_seq(void *arg_0)
{
unsigned int _arg_0 = *((unsigned int *) arg_0);
std::string *str_CURRENT = new std::string(" ");
while (true)
{
for (unsigned int loop_0 = _arg_0; loop_0 < CHARS.length() - 1; loop_0 += NTHREADS)
{
str_CURRENT->back() = CHARS[loop_0];
if (*str_CURRENT == PASSWORD)
{
THREAD_COMPLETE = _arg_0;
return (void *) str_CURRENT;
}
}
str_CURRENT->back() = CHARS.back();
for (int loop_1 = (str_CURRENT->length() - 1); loop_1 >= 0; loop_1--)
{
if (str_CURRENT->at(loop_1) == CHARS.back())
{
if (loop_1 == 0)
str_CURRENT->assign(str_CURRENT->length() + 1, CHARS.front());
else
{
str_CURRENT->at(loop_1) = CHARS.front();
str_CURRENT->at(loop_1 - 1) = CHARS[CHARS.find(str_CURRENT->at(loop_1 - 1)) + 1];
}
}
}
};
}
あなたが記述の症状は、メモリやリソースリークに起因するメモリ不足の状態のものは[OOMキラー](HTTPSを呼び出し、あります – kfsone
@kfsone可能性は高いと思われますが、アプリケーションは最大20MBを使用し、Valgrindは次のように報告します。失われた可能性があります:14ブロックの2,223バイト&&まだ到達可能:56バイト7ブロックでもちろん、修正しようとするリークがいくつかありますが、時にはValgrindが無意味なデータを提供することもあります。 – areuz
hogs CPUが他のプロセスをクラッシュさせてはならないプロセス。それらは遅くなりますが、ハードウェアの不具合やカーネルのバグのためにクラッシュする可能性があります。 –