メモ帳
メモ帳
スポンサーサイト
--年--月--日 (--) --:-- | 編集
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
参照値渡し
2007年05月10日 (木) 10:00 | 編集
kthreadの続き。
某ドライバでこんなコードを書いたわけだけど

for(i=0;i<MAX_DEV;i++){
  th = kthread_create(dev_thread, &i, th_name[i]);
  if (IS_ERR(th)) {
    ERRLOG("なんかえらーめっせーじ");
    return ERR;
  }
  wake_up_process(th);
}

スレッドを識別するために引数として0~MAX_DEV(デバイスの数)
を渡していたわけ。

これがうまく動かなかったわけで。
件名のとおり、参照値渡しをしていたことが原因だったり。

要するに生成する瞬間はi=0を渡しているわけだが、wake_up_process
でスレッドを走らせた後にforループでiがインクリメントされて
それを参照値渡ししていたのでスレッド内でその引数を使用したら
i=1になってたってことらしい(推測。

某組み込みの自社製カーネルでの出来事なんで一般のLinuxで
再現する事かは不明。
コメント
この記事へのコメント
コメントを投稿する
URL :
コメント :
パスワード :
秘密 : 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2004 Powered By FC2 allrights reserved. / template: sukechan
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。