Boost.Interprocess でアプリケーショの多重起動を防止する

この手の処理はいくつか手段があると思うのですが、Boost.Interprocess で書いてみました。

[ソース]

#include <boost/interprocess/managed_shared_memory.hpp>
#include <cstdio>
#include <string>
#include <cstdlib>


int
main(int argc, char* argv[]){
    namespace ipc = boost::interprocess;

    try{
        ipc::shared_memory_object segment(ipc::create_only, "MyApp", ipc::read_write);
    }
    catch(std::exception const& exp){
//      std::cout << exp.what() << std::endl;
        std::cout << "NG" << std::endl;
        getchar();
        std::exit(1);
    }

    std::cout << "OK" << std::endl;
    getchar();
    ipc::shared_memory_object::remove("MyApp"); 

    return 0;
}


最初に起動した時には『OK』が出力され、それが実行している場合、以降は『NG』と出力されます。
要は最初に共有メモリを作って置いて、既に共有メモリが存在している場合は終了するような仕組みです。
Boost.Interprocess あんまり使ったことがないのでもっとスマートな方法があるかも知れない。
(元々は環境に依存するようなコードを書きたくなかった。

[boost]

  • ver 1.53.0