タグ

排他制御に関するdelegateのブックマーク (12)

  • ちょっとJavaのsynchronizedをGoに移植しようとしたはずが、なぜか1万文字の作文ができた - エムスリーテックブログ

    AI機械学習チームのブログリレーも9日目になりました。同チームの横@yokomotodです。 日はJavaGoを題材に並行プログラミングまわりの自由研究をしたお話をしてみたいと思います。 3部構成で、パート1では発端となった「排他制御」について、パート2では「メモリの可視化」について、それぞれJavaGoを比べてみました。 最後にパート3では、それらの動作を規定する「メモリモデル」について、わかりやすく解説されているリソースを紹介します。 長過ぎる! 3行で!! パート1: synchronized = 「排他制御」? Java synchronized vs Go sync.Mutex Goで再入可能なロック? 仮にGoで再入可能なロックを実装するなら? Javaが再入可能を選択した理由 パート2. sycnhronized = 「排他制御」+「メモリ可視性の保証」 Java

    ちょっとJavaのsynchronizedをGoに移植しようとしたはずが、なぜか1万文字の作文ができた - エムスリーテックブログ
  • JET/ACE ロックとインデックス フィールドの値の更新

    分類:[VB6 以前] 環境は Windows 10 + Access 2019 VBA です(VBA ですみません)。 行ロックのテストをしているのですが、 インデックスが設定されたフィールドの値を更新した際の挙動で悩んでいます。 MS はこう明記しているのですが、 ページ レベル ロックとレコード レベル ロック | Microsoft Learn https://learn.microsoft.com/ja-jp/previous-versions/office-development/cc376645(v=msdn.10) >レコード レベル ロックをオンにしても、メモ フィールドやインデックス フィールドの値の更新には適用されないため、これらの操作を行う場合は、ページ レベル ロックに設定してください。 私が書いた簡単なテストプログラム2で、両方否になるはずなのに、 行ロックの

  • MySQL :: InnoDB Data Locking - Part 5 "Concurrent queues"

  • 排他制御の基礎の基礎

    はじめに システムに存在するリソースには同時にアクセスしてはいけないものが多々あります。身近な例を挙げると、Ubuntuのパッケージ管理システムのデータベースがあります。aptコマンドの動作によってこのデータベースは更新されるのですが、同時に2つ以上のaptが動作できたとすると、データベースが破壊されてシステムが危機的状況に陥ります。 このような問題を避けるために、あるリソースに同時に1つの処理しかアクセスできなくする排他制御というしくみがあります。排他制御はOSが提供する重要な機能の一つです。 排他制御が必要なケース 排他制御は直感的ではなく非常に理解が難しいのですが、ここでは比較的理解が簡単なファイルロックというしくみを使って説明します。説明には、あるファイルの中身を読みだして、その中に書いてある数字に1を加えて終了するincというという単純なプログラムを使います。

    排他制御の基礎の基礎
  • 「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン

    この記事は DeNA 20 新卒 Advent Calendar 2020 19日目の記事です。 はじめに MySQLやPostgreSQLに代表されるRDBMSではトランザクションと呼ばれる仕組みが提供されています。多くのWebアプリケーションエンジニアはこのトランザクションを駆使してDBとやりとりをするロジックを組み立てることになります。 しかし不整合を起こしたくない処理があるからといって闇雲にトランザクションを張ったり、トランザクションが張られているからと安心してアプリケーション側で闇雲にロジックを組み立ててしまうと思わぬバグを生むことになってしまいます。 このエントリでは、「トランザクションを張っておけば大丈夫」という考え方は危険な場合もあるということを、ありがちな実装例を交えて紹介していきます。 並列に処理されるトランザクション そもそも、トランザクションは全て直列に処理されるわ

    「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターン
  • 嵐のコンサートがあるとダブルブッキングしてしまうホテル予約システムを作ってみた

    今年の5月1日に、仙台市内のホテルで多重予約のトラブルが発生したと報道されています。 部屋数203室の仙台市のビジネスホテルで、9月18~23日の宿泊予約を数千件受け付けるトラブルがあった。アイドルグループ「嵐」のライブが宮城県内で開催される期間だった。インターネットでの申し込みが殺到し、システム障害が起きたとみられるという。 トラブルがあったのは、仙台市泉区の「ホテルルートイン仙台泉インター」。ホテルなどによると、9月19、20、22、23日に宮城スタジアム(宮城県利府町)で嵐がライブを開くことが明らかになった後の5月1日午前5時ごろ、ネットを使った予約申し込みが殺到していることに気づいたという。 203室のホテルなのに「予約」数千件 嵐公演で殺到か:朝日新聞デジタル より引用 5月1日の朝に何があったのか調べてみると、この日の早朝にテレビや新聞でコンサートの情報が流れたようですね。 お

    嵐のコンサートがあるとダブルブッキングしてしまうホテル予約システムを作ってみた
  • MySQL を使ってリレーショナルデータベースの悲観的・楽観的排他制御を試してみる - CUBE SUGAR CONTAINER

    リレーショナルデータベースの排他制御は、複数のトランザクションが同時に同じリソース (テーブル・行) に対してアクセスしても内容の整合性が崩れないようにするために行うもの。 また、排他制御のやり方には悲観的と楽観的のふたつがある。 悲観的排他制御は、あらかじめ対象のリソースを自分以外のトランザクションから操作できないように排他ロックをかけることで処理をアトミックにして実現する。 それに対して楽観的排他制御では、リソースを操作する際にそれが別のトランザクションから変更されていないことをバージョン番号やタイムスタンプを使って確認することで実現する。 今回はこのふたつの排他制御について MySQL を使って試してみることにする。 尚、今回使用する環境は次の通り。 MySQL はバージョン 5.6.26 を使っている。 $ mysql -u root -e "show variables like

    MySQL を使ってリレーショナルデータベースの悲観的・楽観的排他制御を試してみる - CUBE SUGAR CONTAINER
  • [Access] ファイルの共有ロック数の制限を越えています。 - 戦うSEひろろのブログ

    accessでレコードセットのupdateを一期に大量におこなっていると、「ファイルの共有ロック数の制限を越えています。」のメッセージが。 例)これを2万行分くりかえす set rst=new adodb.recordeset with  rst .source="select * from talbe1" .connection=・・・・・ ・・・・・・ .open Do until .eof !fielda=!fieldb+3 .update .move nxt loop 多分これのこと多数のトランザクション処理中にエラー メッセージ "ファイルの共有ロック数が制限を超えています" が表示される 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0」のMaxLocksPerFileを既定値の9500からおおおきする

  • Accessでの排他制御

    Windows2000 Access2000の環境 サーバにテーブルのみのmdbファイル ローカルにテーブル以外のmdbファイル(テーブルはサーバのテーブルをリンク) 予算の都合で、このやり方で4人同時使用していましたが、問題なく動いてました。 Access2000以前は酷かったように記憶してますが、2000以降はずいぶん改善されているのではないでしょうか。SQLサーバなどのサーバ製品と比べると貧弱かもしれませんが、小規模なシステムならAccessでも十分使えると思いますよ。

    Accessでの排他制御
  • Access | 札幌の不動産会社 フェイス のブログです

  • ADOを使ったレコード単位の排他ロックについて (ACCESS使用時)

    オートナンバーでなく,主キー値を自動取得したい時に 複数のユーザーが使用するような環境だと 採番テーブル というものを作って,そこに現在の主キーの最大値を入れて置くようなことはよくあります。 その時,その値を更新する時,排他状態にしないといけません。 採番テーブルは,以下のようなものを前提にします。 テーブル名: 採番_A ID 長整数型 MaxValue 長整数型 '現在の最大の主キー値を保存 Dummy 長整数型 採番テーブルのレコードは,ID: 1 の1レコードのみ。 主キー値は単純に +1 ずつ増加。 ※ 主キーが "AAA-000001" のように組み合わさっている場合は, 下の fGetNextID に引数を入れて WHERE句でそれぞれの最大値を拾い出すようにします。 Nz(rs!MaxValue) + 1 のようなものでなく, 少しロジックも変更します。 次の主キー値を取得

  • 排他って何だろう

    福岡寿和 FUKUOKA,Toshikazu 富士通SSL はじめに 同時にひとつの資源を複数のプログラムから使おうとしたときは,必ず「排他」というものが必要です.今回は,いろいろある排他問題の中から,RDBMSの世界での「排他」,特にレコード変更(挿入・更新・削除)に関係するものに注目してみます.なお,今回のリストプログラムは,Oracle Objects for OLEをミドルウェアとして,Oracle7またはOracle8をターゲットにしています.また,事前にリスト1を実行して,テスト用のテーブルを作成してください. リスト1:サンプル用定義スクリプト DROP TABLE VBMArea CASCADE CONSTRAINTS; CREATE TABLE VBMArea ( AreaCode CHAR(2) NOT NULL, AreaName VARCHAR2(10) N

  • 1