C ++同時実行とマルチスレッドの研究ノート - 詳細なパラメータを渡します

  • 一時オブジェクトを渡します
    • トラップ
    • 概要
  • スレッドとして一時的なオブジェクトパラメータ
    • スレッドIDの概念
    • ときにオブジェクト構築の一時的な逮捕
  • クラスオブジェクト、スマートポインタを渡します
  • スレッド関数を作成するメンバ関数ポインタ

一時的なオブジェクトは、パラメータとして渡されたスレッド

複数のワーカースレッドを作成し、スレッドが作業番号の内容に基づいて決定されます。各スレッドには、その数を知る必要があります。多くのスレッド当てにならない文言があります。

例1

マルチスレッド機能が実行されます。

ボイドmy_print(のconst int型&I、CHAR * p_mybuff)
{ 
	COUT << I << ENDL。
	coutの<< p_mybuff <<てendl; 
	返します。
}

 書き込みの主な機能

	int型MVAR = 1; 
	INT&mvary = MVAR。
	文字mybuf [] =「これはテストです!」。
	スレッドこのmyobj(my_print、MVAR、mybuf)。
	myobj.join(); 

	裁判所未満<<「メインスレッド!!!」<<てendl;

 説明:トラップを注意してください!引用された参照ポインタ可変トランスミッション。

引用:表面正しいようだが、詳細の多くが参加する場合は、注意を払う必要があります()()、その後、メインスレッドと子スレッドは、実装上発生する可能性があり、メインスレッドを実行しますが、パラメータに渡している切り離すように変更リソースの(引用形式)がリリースされている、可能なエラーはありませんか?

        myobj.detach()

  スレッドオブジェクトを作成する場合は、コピーを作成し、コピーが値で行ってきましたので、それは本当に参照ではない、実際の値が渡され、間違ったリソース解放は発生しません。しかし、他の方法でラウンドは、変数メインスレッドの値は変更されません。

ポインター:渡されたパラメータは、ポインタが第二引数に安全でない場合は、スレッドを実行する際にdetach()が、「参照」をお勧めしていない場合は、ポインタは確かに問題があるだろう!

何が正しい使い方です:あなたは、文字列を渡したい場合は、参照することによってケースを渡しません。

チャーは* constの文字列&p_mybuffにp_mybuff、変換の変数の型があったとき、同じメモリを指していませんか?実際には、主な機能の存在は、完成行って、p_mybuff、文字列p_mybuffを変換するだけでシステムを回復してきました

	スレッドこのmyobj(my_print、MVAR、文字列(mybuf))。

  キャスト文字列は一時的なオブジェクトを生成する場合は、一時的なオブジェクトがp_mybuffに、この場合には結合しました。スレッドが作成されると、パラメータを渡すために一時変数を構築する方法は、この時点で、実現可能であるコンストラクタ一度呼び出されます、そして、デタッチが正常に実行することができます。メインスレッドが終了し、不正なメモリ参照の子スレッドを防ぐために。

1)INTを送信するため、値が直接渡さ。

クラスオブジェクトが渡された場合2)、暗黙の型変換を回避します。すべての一時オブジェクトを構築するためのスレッドを作成するとき、関数パラメータに渡された受信を参照して機能します。そうでなければ、システムは、不必要な浪費をもたらす、多機能を構築します。

次いで、3)メインスレッド型の変換、(mysecondpar)操作メインスレッドによってこのステップ

スレッドこのmyobj(myprint、MVAR、(mysecondpar))。

スレッドこのmyobj(myprint、MVAR、mysecondpar)。

4)と結合、切り離しをお勧めしません

一時的なオブジェクトは、パラメータとして渡されたスレッド

スレッドID:オペレーティングシステムレベルで、このスレッドでリソース割り当てを管理するために使用されるスレッド、スレッドID、スレッドIDとファイルディスクリプタを、スケジュールする必要があります。スレッド間のスケジューリング要求する、優先順位の概念もあります。各スレッドIDは、STDを取得するC ++標準ライブラリ関数内で使用することができ、スレッドIDに対応:: this_thread :: GET_ID()。

スレッドに渡す関数パラメータは、入口のパラメータがconstの場合、あなたが「可変」の初期設定で変数を変更する必要がある場合は、constが、関数内で変更することはできません。C ++では、変更可能なだけでなく、CONSTや設定の制限を突破します。変更可能な修正変数は、変数は常にさえconstの機能では、状態になります。

 

おすすめ

転載: www.cnblogs.com/rynerlute/p/11795565.html