現在、私は C で書かれた非常に単純な IRC ボットを持っています。これを実行すると、接続が確立され、指定されたチャネルに参加します。接続の詳細はすべてハードコードされていますが、これは問題ではありません。
私がやりたいことは、基本的なシェルを同時に実行することです。つまり、現在 IRC チャネルからテキストを受信し、それを解析する必要があるループは、バックグラウンドのスレッドで実行されています。このシェルから、IRC チャネルにメッセージを送信したり、プログラムを正常に終了したりできるコマンドを実行できるようにしたいと考えています (つまり、両方のスレッドを閉じる必要があります)。このシェルは、いかなる種類のジョブ制御シェルであることを意図したものではありません。
このボットの主なポイントは、投稿されたすべての URL についてチャネルを監視し、それらを SQLite データベースに保存することです。IRC チャネルのユーザーは、データベースで特定の URL を検索できます。また、検索などのさまざまなデータベース コマンドをシェルから実行できるようにしたいと考えていますが、手動での挿入と削除も実行したいと考えています。これについて言及するのは、すべてのデータベース アクセスがスレッド セーフであることを確認する必要があると想定しているためです。また、理想的には、検索よりもデータベースへの挿入を優先することをお勧めしますが、これは実際には私の要件リストの最後です。
最後に、IRC チャネルから受信した一部のコマンドが独自のスレッドに生成される可能性があります。これは、彼らがデータベースにアクセスしていることが原因である可能性がありますが、これは間違いなく即時ではない可能性がありますが、チャネルへのメッセージの送信をずらすために一定期間スレッドをブロックするメソッドを呼び出しているためでもあります。
これは私が求めているものです:
- この種のプログラムを設定するにはどうすればよいですか? 2 つのメイン スレッドを同時に実行し、2 つのメイン スレッド間でメッセージをやり取りするには、どのような構造が必要ですか?
- IRC チャネルとの通信に使用されるソケットへのアクセスは、スレッドセーフである必要がありますか?
- プログラムをスレッドセーフにするにはどうすればよいですか? ミューテックスで十分ですか?
問題があれば、プログラムはほぼ確実に Ubuntu Server ディストリビューションで実行されます。