melt日記

.NETすらまともに扱えないへたれのページ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  111  : 記事  3  : コメント  8241  : トラックバック  41

ニュース

わんくま同盟

わんくま同盟

C# と VB.NET の質問掲示板

iKnow!


Dictation



書庫

自分は今まで、出来る限りマルチスレッドとは関わらないようにしてきました。


曰く、マルチスレッドは100億千万回に1回しか再現しないバグがある。

曰く、マルチスレッドはライブラリにもバグがある。

曰く、マルチスレッドは実装工数が半分になってバグ工数が2乗になる。

曰く、マルチスレッドに関わると糸を見ただけで気が触れるようになる。


これだけ聞かされればそりゃマルチスレッドが怖くなるというものです。


でも最近マルチスレッドのデザインパターン本を読んで何となく理解した気になってきたので、(まんじゅうこわい的な意味で)マルチスレッドこわいです。

仕事では使うチャンスがないので家でしか遊んでませんが。


で、Boost には Boost.Thread というのがあるので、これを使って汎用的に Thread-Per-Message パターンを行うクラスを作ってみました。

Thread-Per-Message パターンは、特定の処理をスレッドにポイッと渡して処理してもらうパターンです。

時間の掛かる処理をスレッドに行ってもらうことによって、呼び出す側の応答速度が上がります。

戻り値はありません。戻り値が欲しい場合は Future パターンを使います。

// Thread-Per-Message
class thread_function
{
private:
    boost::thread_group group_;


public:
    // post_message が呼ばれるたびに新しいスレッドを作って
    // func を実行する
    void post_message(boost::function0<void> func)
    {
        group_.create_thread(func);
    }

    void join_all() { group_.join_all(); }
};

// テストコード
boost::mutex g_mutex;

class hoge
{
private:
    const std::string str_;

public:
    hoge(std::string str) : str_(str) { }

    void func(int count)
    {
        for (int i = 0; i < count; i++)
        {
            boost::mutex::scoped_lock lock(g_mutex);
            std::cout << str_ << " - " << i << std::endl;
        }
    }
};


void func(int count, std::string str)
{
    for (int i = 0; i < count; i++)
    {
        boost::mutex::scoped_lock lock(g_mutex);
        std::cout << str << " - " << i << std::endl;
    }
}


void main()
{
    {
        boost::mutex::scoped_lock lock(g_mutex);
        std::cout << "start" << std::endl;
    }
    thread_function tf;

    // グローバル関数をスレッドから実行する
    tf.post_message(boost::bind(func, 2, "    ::func1"));

    // メンバ関数をスレッドから実行する

    hoge h1("hoge::func1");
    tf.post_message(boost::bind(&hoge::func, &h1, 3));

    tf.post_message(boost::bind(func, 4, "    ::func2"));

    hoge h2("hoge::func2");
    tf.post_message(boost::bind(&hoge::func, &h2, 5));

    {
        boost::mutex::scoped_lock lock(g_mutex);
        std::cout << "end" << std::endl;
    }
    tf.join_all();
}

// 実行結果

start
    ::func1 - 0
    ::func2 - 0
hoge::func1 - 0
hoge::func2 - 0

end                        // ここで main は終了している
    ::func1 - 1
    ::func2 - 1
hoge::func1 - 1
hoge::func2 - 1

    ::func2 - 2
hoge::func1 - 2
hoge::func2 - 2
    ::func2 - 3
hoge::func2 - 3

hoge::func2 - 4

boost::function0<void> を使うことによって、どんな関数でも実行することが出来るようになっています。

Boost.Function 超便利っす。


ところで作ってみたはいいけど Thread-Per-Message パターンを実際に使用するシチュエーションというのが思い浮かばない訳ですががが。

投稿日時 : 2008年2月8日 0:16

コメント

# re: Boost によるデザインパターン - Thread-Per-Message 2008/02/08 11:52 アキラ
>ここで main は終了している
あれ?mainは終わってないんじゃ…
join_allで全部のスレッドが終わるの待ってますよね?

# re: Boost によるデザインパターン - Thread-Per-Message 2008/02/08 12:11 アキラ
マルチスレッドでは、ブロッキングが怖いです。。。

# re: Boost によるデザインパターン - Thread-Per-Message 2008/02/08 13:12 とっちゃん
マルチスレッドは、コンフリクトデッドロックが一番厄介かなぁ...w

あとは、不可解なバグのデバッグテクニックに神がかり的な要素が必要というのが...w

うーん...最近はやり?>マルチスレッド

# re: Boost によるデザインパターン - Thread-Per-Message 2008/02/08 15:23 凪瀬
マルチスレッドは超絶技巧が必要だったりしてプログラムするのが非常に楽しいです。
バグが出ると、どうにもならなくて非常にしんどいですけどもw

状態というかステータスが非同期に変更されることに起因するバグがどうにも厄介ですねぇ。
マルチスレッドでなくとも不正データの出所を突き止めるのは難しいですが、
マルチスレッドだと妙なタイミングのハザマから不正データが生み出されたりするので余計に厄介。

# re: Boost によるデザインパターン - Thread-Per-Message 2008/02/09 0:15 melt
>あれ?mainは終わってないんじゃ…
すんませんデストラクタとかスレッドマネージャが join_all してると妄想しながら読んでくださいorz

>あとは、不可解なバグのデバッグテクニックに神がかり的な要素が必要というのが...
燃えるんですよねw

>ステータスが非同期に変更されることに起因するバグがどうにも厄介
ですね。
うまく設計しないとキャッシュとかの関係で見つけにくいバグがでて、やっとの思いで見つけて「とりあえず問題の箇所を排他しとけばいいや」とか思って適当にミューテクスを張ったりなんかすると今度はデッドロックするという罠。

設計とマルチスレッドは結構強い相関があるんじゃないかと思った今日この頃。

# Boost によるデザインパターン - Future 2008/02/09 0:17 melt日記
Boost によるデザインパターン - Future

# doxycycline pills https://doxycyline1st.com/
where can i get doxycycline 2022/02/26 0:59 Jusidkid
doxycycline pills https://doxycyline1st.com/
where can i get doxycycline

# order doxycycline online https://doxycyline1st.com/
doxycycline order online 2022/02/26 10:03 Jusidkid
order doxycycline online https://doxycyline1st.com/
doxycycline order online

# generic prednisone pills http://prednisonefast.site/ 2022/04/16 23:12 Prednisone
generic prednisone pills http://prednisonefast.site/

# clomid price https://clomidonline.icu/ 2022/07/08 13:57 Clomidj
clomid price https://clomidonline.icu/

# ivermectin rosacea reddit https://stromectolbestprice.com/ 2022/07/30 0:52 BestPrice
ivermectin rosacea reddit https://stromectolbestprice.com/

# prednisone for sale online https://deltasone.icu/
buy prednisone without a prescription best price 2022/08/22 10:02 Prednisone
prednisone for sale online https://deltasone.icu/
buy prednisone without a prescription best price

# non prescription ed pills https://withoutdoctorprescription.xyz/
ed meds online without prescription or membership 2022/09/07 10:23 IvanPres
non prescription ed pills https://withoutdoctorprescription.xyz/
ed meds online without prescription or membership

# cheap erectile dysfunction pill https://ed-pills.xyz/
mens erection pills 2022/09/17 8:08 EdPills
cheap erectile dysfunction pill https://ed-pills.xyz/
mens erection pills

# anti fungal pills without prescription - https://cheapdr.top/# 2023/04/03 15:40 Dikolipo
anti fungal pills without prescription - https://cheapdr.top/#

# doxycycline hyc 100mg - https://doxycyclinesale.pro/# 2023/04/22 4:17 Doxycycline
doxycycline hyc 100mg - https://doxycyclinesale.pro/#

# prednisone price south africa - https://prednisonesale.pro/# 2023/04/22 15:23 Prednisone
prednisone price south africa - https://prednisonesale.pro/#

# buy cytotec over the counter - https://cytotecsale.pro/# 2023/04/29 4:54 Cytotec
buy cytotec over the counter - https://cytotecsale.pro/#

# best over the counter dark spot remover https://overthecounter.pro/# 2023/05/08 23:00 OtcJikoliuj
best over the counter dark spot remover https://overthecounter.pro/#

# cheapest ed pills: https://edpills.pro/# 2023/05/16 3:34 EdPillsPro
cheapest ed pills: https://edpills.pro/#

# online ed pills https://edpill.pro/# - best male enhancement pills 2023/06/27 14:45 EdPills
online ed pills https://edpill.pro/# - best male enhancement pills

# paxlovid generic https://paxlovid.pro/# - Paxlovid buy online 2023/07/03 4:13 Paxlovid
paxlovid generic https://paxlovid.pro/# - Paxlovid buy online

# paxlovid pill https://paxlovid.store/
paxlovid cost without insurance 2023/07/13 21:52 Paxlovid
paxlovid pill https://paxlovid.store/
paxlovid cost without insurance

# cure ed https://edpills.ink/# - erectile dysfunction medications 2023/07/27 1:02 EdPills
cure ed https://edpills.ink/# - erectile dysfunction medications

# buy cytotec https://cytotec.ink/# - buy cytotec online 2023/07/27 1:27 PillsFree
buy cytotec https://cytotec.ink/# - buy cytotec online

# online apotheke deutschland 2023/09/26 12:06 Williamreomo
https://onlineapotheke.tech/# gГ?nstige online apotheke
internet apotheke

# versandapotheke 2023/09/26 23:52 Williamreomo
http://onlineapotheke.tech/# п»?online apotheke
gГ?nstige online apotheke

# gГјnstige online apotheke 2023/09/27 2:20 Williamreomo
https://onlineapotheke.tech/# internet apotheke
versandapotheke

# п»їonline apotheke 2023/09/27 4:08 Williamreomo
http://onlineapotheke.tech/# п»?online apotheke
online apotheke deutschland

# versandapotheke deutschland 2023/09/27 4:59 Williamreomo
https://onlineapotheke.tech/# online apotheke preisvergleich
versandapotheke

# п»їonline apotheke 2023/09/27 7:04 Williamreomo
https://onlineapotheke.tech/# п»?online apotheke
online apotheke deutschland

# п»їonline apotheke 2023/09/27 10:22 Williamreomo
https://onlineapotheke.tech/# versandapotheke
online apotheke preisvergleich

# п»їfarmacia online migliore 2023/09/27 17:59 Rickeyrof
acheter sildenafil 100mg sans ordonnance

# farmacia online senza ricetta 2023/09/27 21:29 Rickeyrof
acheter sildenafil 100mg sans ordonnance

# migliori farmacie online 2023 2023/09/27 22:34 Rickeyrof
acheter sildenafil 100mg sans ordonnance

# natural remedies for ed https://edpillsotc.store/# - cure ed 2023/10/08 1:23 EdPills
natural remedies for ed https://edpillsotc.store/# - cure ed

# your canada drug store 2023/10/15 5:49 Kiethamert
http://gabapentin.world/# gabapentin 100mg

# canadian drug stores 2023/10/16 18:40 Dannyhealm
Their digital prescription service is innovative and efficient. http://mexicanpharmonline.com/# mexican border pharmacies shipping to usa

# mexican drug stores online 2023/10/16 21:56 Dannyhealm
Their health awareness programs are game-changers. https://mexicanpharmonline.shop/# pharmacies in mexico that ship to usa

# canada pharmacies online prescriptions 2023/10/16 23:28 Dannyhealm
Read information now. http://mexicanpharmonline.shop/# pharmacies in mexico that ship to usa

# online prescription canada 2023/10/17 9:51 Dannyhealm
Their team understands the nuances of global healthcare. http://mexicanpharmonline.shop/# mexican mail order pharmacies

# mexican farmacia online 2023/10/17 12:08 Dannyhealm
They provide access to global brands that are hard to find locally. http://mexicanpharmonline.shop/# mexico drug stores pharmacies

# canadian and international prescription service 2023/10/17 15:33 Dannyhealm
Medicament prescribing information. https://mexicanpharmonline.shop/# mexican border pharmacies shipping to usa

# safe canadian pharmacies online 2023/10/18 5:41 Dannyhealm
A seamless fusion of local care with international expertise. https://mexicanpharmonline.shop/# mexico drug stores pharmacies

# best rated canadian pharmacies 2023/10/18 11:33 Dannyhealm
Their mobile app makes managing my medications so easy. http://mexicanpharmonline.com/# reputable mexican pharmacies online

# order meds from canada 2023/10/18 14:27 Dannyhealm
Get warning information here. https://mexicanpharmonline.com/# mexican rx online

# cheap prescription medication online 2023/10/19 5:22 Dannyhealm
They have a fantastic range of supplements. http://mexicanpharmonline.shop/# pharmacies in mexico that ship to usa

# mexican pharmaceuticals online 2023/11/15 18:17 DavidFap
http://edpills.icu/# natural remedies for ed

# doxycycline 100mg dogs https://doxycycline.forum/ doxycycline 100mg tablets 2023/11/25 13:23 Doxycycline
doxycycline 100mg dogs https://doxycycline.forum/ doxycycline 100mg tablets

# canadian mail order pharmacies 2023/12/01 15:36 MichaelBum
http://clomid.club/# get generic clomid tablets

# farmaci senza ricetta elenco https://farmaciait.pro/ farmacie online sicure 2023/12/04 10:19 Farmacia
farmaci senza ricetta elenco https://farmaciait.pro/ farmacie online sicure

# prednisone cost in india https://prednisonepharm.store/ prednisone price 2024/01/20 17:37 Prednisone
prednisone cost in india https://prednisonepharm.store/ prednisone price

# gates of olympus oyna demo - https://gatesofolympus.auction/ gates of olympus 1000 demo 2024/03/27 20:45 Olympic
gates of olympus oyna demo - https://gatesofolympus.auction/ gates of olympus 1000 demo

# buy misoprostol over the counter https://cytotec.club/ order cytotec online 2024/04/28 2:08 Cytotec
buy misoprostol over the counter https://cytotec.club/ order cytotec online

Post Feedback

タイトル
名前
Url:
コメント