[過去ログ] マルチスレッドプログラミング相談室 (986レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
183(3): 01/11/16 00:17 AAS
便乗で質問させてください。
時刻の取得⇒文字列として表示、にlocaltime, ctimeを使おうと思ったのですが
スレッド安全ではないために、localtime_r, ctime_rで記述しました。
ところがコンパイルは通るものの、実行すると上記箇所にて
coreを吐いて死んでしまいます。
(localtime, ctimeで記述時の動作は、期待通りです)
Solaris8, gcc295を使用しているのですが、
"*_r"関数には、何かしらの制限等があるのでしょうか?
185: 01/11/16 00:34 AAS
>>183は単にメモリを確保してないと思われ。
187: 01/11/16 02:30 AAS
>>183
とりあえず「スレッドセーフ」って読んだほうが良いかと...。
>>179
どういう構造でmulti-threadが実装されているのか理解するまでは
愚直に危うそうな資源を排他するのをおすすめします。
「同時に同じ領域へアクセスしなければ特に排他処理をしなくても問題ない」
という表現に危うさを感じます。
たとえば、排他をしないでどうやって同時でないことを保証しましょう?
192(1): 183 01/11/16 10:07 AAS
皆様のご指摘どおり、メモリを確保していないために
起きた現象でした。
メモリ確保をすることによって無事解決をしました。
ありがとうございます。
メモリを確保する必要があるのですね、知りませんでした。
その必要性は、以下のような解釈でよろしいですよね。。。
localtimeは、関数内static領域を保持することを前提に設計された関数であり
localtime_rは代替関数である。この関数はライブラリ内部の共通バッファを
使用しないことによってスレッドセーフを実現しているため、当然
自前でメモリを確保する必要性がある。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.047s