Submit Search
Upload
[Basic 9] 並列処理 / 排他制御
•
1 like
•
2,562 views
Yuto Takei
Follow
早稲田大学 高度データ関連人材育成コンソーシアム D-DATa ブロックチェーン エンジニアリング 基礎編 第9回 2018/3/1
Read less
Read more
Education
Report
Share
Report
Share
1 of 28
Download now
Download to read offline
Recommended
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Recommended
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
テストとリファクタリングに関する深い方法論 #wewlc_jp
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
JavaScriptでSQLを唱えたいだけの人生だった
JavaScriptでSQLを唱えたいだけの人生だった
iPride Co., Ltd.
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
MVC の Model を考える
MVC の Model を考える
tomo_masakura
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
30分でわかる広告エンジンの作り方
30分でわかる広告エンジンの作り方
Daisuke Yamazaki
例外設計における大罪
例外設計における大罪
Takuto Wada
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
Preferred Networks
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
Google Cloud Platform - Japan
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
PrometheusによるKubernetes環境の異常検知改善.pptx
PrometheusによるKubernetes環境の異常検知改善.pptx
TakashiTsukamoto4
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Shohei Okada
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
Torao Takami
More Related Content
What's hot
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
Yoichi Toyota
分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
JavaScriptでSQLを唱えたいだけの人生だった
JavaScriptでSQLを唱えたいだけの人生だった
iPride Co., Ltd.
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Shin Ohno
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
MVC の Model を考える
MVC の Model を考える
tomo_masakura
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
TATSUYA HAYAMIZU
30分でわかる広告エンジンの作り方
30分でわかる広告エンジンの作り方
Daisuke Yamazaki
例外設計における大罪
例外設計における大罪
Takuto Wada
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
Preferred Networks
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
増田 亨
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
takezoe
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
Google Cloud Platform - Japan
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
PrometheusによるKubernetes環境の異常検知改善.pptx
PrometheusによるKubernetes環境の異常検知改善.pptx
TakashiTsukamoto4
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Shohei Okada
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
VirtualTech Japan Inc.
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
道化師 堂華
What's hot
(20)
なぜ人は必死でjQueryを捨てようとしているのか
なぜ人は必死でjQueryを捨てようとしているのか
分割と整合性と戦う
分割と整合性と戦う
JavaScriptでSQLを唱えたいだけの人生だった
JavaScriptでSQLを唱えたいだけの人生だった
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Twitterのsnowflakeについて
Twitterのsnowflakeについて
MVC の Model を考える
MVC の Model を考える
C#でもメタプログラミングがしたい!!
C#でもメタプログラミングがしたい!!
30分でわかる広告エンジンの作り方
30分でわかる広告エンジンの作り方
例外設計における大罪
例外設計における大罪
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / C...
ドメイン駆動設計(DDD)の実践Part2
ドメイン駆動設計(DDD)の実践Part2
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
PrometheusによるKubernetes環境の異常検知改善.pptx
PrometheusによるKubernetes環境の異常検知改善.pptx
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
Laravel × レイヤードアーキテクチャを実践して得られた知見と反省 / Practice of Laravel with layered archi...
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
今さら聞けない人のためのDocker超入門 CentOS 7.2対応版
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
Similar to [Basic 9] 並列処理 / 排他制御
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
Torao Takami
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
Toshiaki Nozawa
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
Yoshinori Matsunobu
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
sandai
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
NTT DATA Technology & Innovation
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016
VirtualTech Japan Inc.
Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節
Yuichiro Saito
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
DNA Data Bank of Japan center
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Kohsuke Yuasa
Amazon ElastiCache(初心者向け 超速マスター編)JAWSUG大阪
Amazon ElastiCache(初心者向け 超速マスター編)JAWSUG大阪
崇之 清水
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
sandai
Webサーバのチューニング
Webサーバのチューニング
Yu Komiya
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
Amazon Web Services Japan
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
Hirotaka Kawata
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
Insight Technology, Inc.
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
JPCERT Coordination Center
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
VirtualTech Japan Inc.
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
Satoshi Shimazaki
Similar to [Basic 9] 並列処理 / 排他制御
(20)
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
エンジニア目線で見る TLA+ と PlusCal - TAKAMI Torao
Kernel vm study_2_xv6_scheduler_part1_revised
Kernel vm study_2_xv6_scheduler_part1_revised
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
OpenStack本番環境の作り方 - Interop 2016
OpenStack本番環境の作り方 - Interop 2016
Principles of Transaction Processing Second Edition 9章 4~9節
Principles of Transaction Processing Second Edition 9章 4~9節
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
NGS解析を始めた時にぶつかりがちな小さい壁あれこれ
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
Amazon ElastiCache(初心者向け 超速マスター編)JAWSUG大阪
Amazon ElastiCache(初心者向け 超速マスター編)JAWSUG大阪
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
Webサーバのチューニング
Webサーバのチューニング
20120117 13 meister-elasti_cache-public
20120117 13 meister-elasti_cache-public
本当にわかる Spectre と Meltdown
本当にわかる Spectre と Meltdown
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
CloudStack徹底入門読書会 第4章 4.6 グローバル設定について
More from Yuto Takei
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
Yuto Takei
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
Yuto Takei
開発チームにおける多様性のススメ
開発チームにおける多様性のススメ
Yuto Takei
ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
Yuto Takei
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来
Yuto Takei
ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用
Yuto Takei
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
Yuto Takei
ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討
Yuto Takei
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
Yuto Takei
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理
Yuto Takei
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
Yuto Takei
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
Yuto Takei
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる
Yuto Takei
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
Yuto Takei
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
Yuto Takei
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
Yuto Takei
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
Yuto Takei
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
Yuto Takei
[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析
Yuto Takei
More from Yuto Takei
(20)
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
ブロックチェーンと仮想通貨 -- 新しいビジネスに挑戦
開発チームにおける多様性のススメ
開発チームにおける多様性のススメ
ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン神話に迫る - 本当に使える? 使えない?
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術者が夢見る未来
ブロックチェーン技術の課題と社会応用
ブロックチェーン技術の課題と社会応用
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
ブロックチェーンの不動産登記への応用に関する検討
ブロックチェーンの不動産登記への応用に関する検討
51% 攻撃の原理とシミュレーション
51% 攻撃の原理とシミュレーション
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 04] ブロックチェーンの動作原理
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 03] MinChain - 教育用ブロックチェーンの紹介
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 02] シェルの使い方 / Git, GitHub について
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Intermediate 01] イントロダクション / Bitcoin を動作させる
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 15] ソフトウェアと知的財産権 / ブロックチェーンと計算機科学 / MinChain の紹介
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 14] 暗号について / RSA 暗号 / 楕円曲線暗号
[Basic 13] 型推論 / 最適化とコード出力
[Basic 13] 型推論 / 最適化とコード出力
[Basic 12] 関数型言語 / 型理論
[Basic 12] 関数型言語 / 型理論
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 11] 文脈自由文法 / 構文解析 / 言語解析プログラミング
[Basic 10] 形式言語 / 字句解析
[Basic 10] 形式言語 / 字句解析
Recently uploaded
modul belajar bagasa jepang pemula -N5.pdf
modul belajar bagasa jepang pemula -N5.pdf
jaquarisjaquaris
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
Tokyo Institute of Technology
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
Tokyo Institute of Technology
On community support centres as a sales destination.pdf
On community support centres as a sales destination.pdf
oganekyokoi
Key points of the revision of the Inheritance Law Contribution and Special Co...
Key points of the revision of the Inheritance Law Contribution and Special Co...
oganekyokoi
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
ssusere0a682
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
東京工業大学
Recently uploaded
(7)
modul belajar bagasa jepang pemula -N5.pdf
modul belajar bagasa jepang pemula -N5.pdf
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
東京工業大学 大学院 6学院入試説明会資料 2024年度受験者向け
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
On community support centres as a sales destination.pdf
On community support centres as a sales destination.pdf
Key points of the revision of the Inheritance Law Contribution and Special Co...
Key points of the revision of the Inheritance Law Contribution and Special Co...
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習108 -フリーライダー② -#ゲーム理論 #gametheory #数学
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
〔第27回日本高等教育学会年会発表〕IRにおける教務概念のオントロジー化 − 情報科学からのアプローチ −
[Basic 9] 並列処理 / 排他制御
1.
第9回 オペレーティング システム 並列処理と排他制御 オペレーティングシステムの概念 Abraham Silberschatz,
Peter Baer Galvin, Greg Gagne (著) ISBN: 9784320122536 画像は https://www.amazon.co.jp/dp/4320122534 より引用 1
2.
近年のコンピュータにおいては、複数の プロセッサ (コアとも) を搭載した
CPU なども登場している 並列コンピューティング Core 0 Core 2 Core 1 Core 3 Memory (右) https://ja.wikipedia.org/wiki/マルチコア より引用 2
3.
レース状態 プログラムが並列実行されるとき、 実行のタイミングによっては、レース 状態 (競合状態) が発生する 例: a[0]++; 上の擬似アセンブラ: load
$v1, a[0] add $v2, $v1, 1 store a[0], $v2 スレッド 1 スレッド 2 i = 100 load $v1, a[0] ($v1 → 100) add $v2, $v1, 1 ($v2 → 101) store a[0], $v2 (i → 101) load $v1, a[0] ($v1 → 100) add $v2, $v1, 1 ($v2 → 101) store a[0], $v2 (i → 101) 3
4.
処理の原子性 (Atomicity) 命令セット アーキテクチャ
(ISA) レベルでは、命令間の依存関係が解析され、原始的に 実行されるのと同じ結果になる レジスタのインクリメント (例): addi $v0, $v0, 1 プログラムの命令は必ずしも他の命令の割り込みを受けずに実行されるとは限らない このような場合はどうすればよいか? 4
5.
クリティカル セクション 複数プロセスが同時に実行することで、データ破損が起こる可能性のある処理をクリ ティカル セクション
(きわどい領域) と呼ぶ。次の性質が要求される ● Mutual Exclusion プロセスがクリティカルセクションにいる間、他のいかなるプロセスもクリティカルセッションを実 行していない ● Progress クリティカル セクションに入ることを要求しているプロセスがいる場合、必ずひとつは実行を許 可される ● Bounded Waiting クリティカル セクションに入ることを要求したプロセスは、必ず一定の時間内に実行を許可され る 5
6.
排他制御 クリティカル セクションの機構を実現するために、以下のような同期プリミティブを用いる ことで排他制御 (Mutual
Exclusion) を実現する必要がある ● ミューテックス (Mutex) 本来は排他制御全般のことを指すが、プログラミングでは1 プロセスだけが実行できる排他制 御機構のことを特にミューテックスと呼ぶ ● セマフォ (Semaphore) 指定された任意の数のプロセスだけが並列実行できるようにする仕組み ● 条件変数 (Condition Variable) / モニタ (Monitor) ビジー ウェイトを避けるため、待ち状態になっているプロセスの一覧を管理するための変数を 条件変数と呼ぶ 6
7.
簡単なロックの試行 全スレッド共通のデータ領域: 個別スレッドでの実装: bool lock =
false; while (lock) { // wait... } lock = true; // Critical section lock = false; この方法には問題がある。 どのような問題か? 7
8.
Test and Set
(TAS) あるブーリアン変数に対して、原始的にその値を読み出してから 1 (true) をセットし読み 出した値を返す処理や関数を、Test and Set (TAS) と呼ぶ atomic bool TAS(bool *lock) { bool ret = *lock; *lock = true; return ret; } 8
9.
TAS を使ったクリティカル セクション 全スレッド共通のデータ領域: 個別スレッドでの実装: bool
lock = false; while (TAS(&lock)) { // wait... } // Critical section lock = false; 9 さきほどの方法で 保護できなかった lock 変数が 正しく保護できる
10.
Compare and Swap
(CAS) TAS より、少し賢いメカニズムとして、整数レジスタを使った Compare and Swap (CAS) も存在する atomic bool CAS(int *pt, int oldVal, int newVal) { if (*pt == oldVal) { *pt = newVal; return true; } else { return false; } } 10
11.
CAS を使ったクリティカル セクション 全スレッド共通のデータ領域: 個別スレッドでの実装: bool
lock = false; while (!CAS(&id, 0, myId)) { // wait... } // Critical section id = 0; 11
12.
ミューテックス (Mutex) TAS や
CAS のようなロックの仕組みを一般化して ● acquire(mutex) ミューテックス変数 mutex で保護されたクリティカルセクションに入る ● release(mutex) 上記クリティカル セクションから抜ける のように簡易に表現することがある C# での例 System.Threading.Mutex オブジェクトには以下のメソッドがある ● WaitOne メソッド ● ReleaseMutex メソッド 12
13.
スピン ロック ロックの実装方式によっては、繰り返し 処理で待ち続けなければならない。この ようなロックを、スピンロック (Spinlock) と呼ぶ この間も計算資源を消費するので、ビジー
ウェイト (Busy wait) である ● ごく短時間 (数サイクル分) でロックが取得できるならば、効率が良い ● レジスタを利用するだけなので、実装が非常に簡単 while (!CAS(&id, 0, myId)) { // wait... } // Critical section id = 0; 13
14.
条件変数 ビジー ウェイトの場合、プロセッサ時間を常に消費することになるので、ロックが取得で きるまではスレッドを sleep
にしておくのが良い。これを実現するのが条件変数 (Condition Variable) である 通常はミューテックスと組み合わせて利用する ● wait(cnd, mtx) ミューテックスを解放し、条件変数の待ち行列に 追加し、スレッドを待ち状態にする ● notify(cnd) 条件変数の先頭のスレッドを、待ち状態から実行 可能状態に復帰させる スレッド 1 スレッド 4 スレッド 5 条件変数の例: ⋮ 14
15.
条件変数 acquire(mtx); while (!condition) { wait(mtx,
cnd); } // critical section release(mtx); condition cnd; mutex mtx; notify(cnd); クリティカル セクション側 全スレッド共通のデータ領域: 再開させるスレッド: 15
16.
(参考) データベースでの並列処理 データベースにはトランザクションと呼ばれる機能がある。高速化のために並列実行されるが、互い の干渉を避けるための一貫性の度合いと、パフォーマンスとの兼ね合いで、その分離レベルを選択 できる ● Serializable
(直列可能) 並列実行ではなく、直列で実行するのと同じ結果。最も高い分離レベル ● Repeatable Read (再現性のある読み込み) 読み込めるデータは常に一貫しているが、新規追加や削除されたデータが見えるファントム リード (Phantom read) が起こる ● Read Committed (コミット済みの読み込み) コミットされたデータだけが読める。非再現読み取り(Non-repeatable read) が起こる ● Read Uncommitted (コミット前の読み出し) 他のトランザクションのコミット前の変更がすべて見える。最も低い分離レベル 16
17.
食事する哲学者問題 並列処理に関する思考実験。5 人の哲学者が円卓 を囲んで、パスタを食べる。左右にはフォークが あり、食事のためには両方のフォークが必要。 どうすれば食事できるか? 簡単なアルゴリズム: 右手のフォークを持ち上げる 左手のフォークを持ち上げる 食べる 左手のフォークを戻す 右手のフォークを戻す https://ja.wikipedia.org/wiki/食事する哲学者の問題 より引用 17
18.
デッドロック 複数のプロセスが、それぞれ複数種類の 資源を要求するとき、プロセスどうしが 互いに、すでに占有している資源どうし を要求したときに、永久的に待ち状態に なってしまうことをデッドロックという 次のような処理を行う ● デッドロックの回避 ● デッドロックの検出 プロセス
1 プロセス 2 資源 1 資源 2 資源 2 資源 1 18
19.
解法 1: 資源に優先順位を持たせる 占有したい資源に対して順序関係をもたせて、その 関係に反しないように占有していく方法 フォーク 1 フォーク 2 フォーク 3 フォーク 4 フォーク 5 哲学者
1 哲学者 3 哲学者 2 哲学者 4 哲学者 5 19
20.
解法 2: 資源管理を別で行う 資源管理を行うモジュールを別途で用意し、デッドロックを回避するように資源の占有を 許可する 資源管理 哲学者
1 哲学者 2 哲学者 3 哲学者 4 哲学者 5 20
21.
デッドロックを検出する ● 静的な解析 (Static
Analysis) プログラムを実行することなく、複数スレッドで実行されたときの状態を仮定して、状 態空間を全探索する。本来同時に実行されるべきでない制御フローを検出する ● 動的な検出 オペレーティング システムの実装において、デッドロックを検出する機構はたいて い存在しない。一方で、データベース エンジンには、そのようなアルゴリズムが備 わっている (参考) https://technet.microsoft.com/library/ms178104.aspx 21
22.
生産者・消費者問題 生産者・消費者問題 (Producer-Consumer Problem)
では、要素を作成する生産者と 消費者がおり、ひとつの記憶領域 (リング バッファ) がある。バッファ境界問題 (Bounded-Buffer Problem) とも ● 生産者は、消費者がまだ読むでいないアイテムを上書きしてはいけない ● 消費者は、生産者が作成していない領域を読んではいけない 10 2 7 5 4 9 消費者 生産者 22
23.
生産者・消費者問題 ソースコードは別途参照 https://gist.github.com/yutopio/dff12406968f6f2ca8d641074d64374d 23
24.
セマフォ (Semaphore) Semaphore では内部にカウンタを持ち、ある資源に対しての次のような排他制御方法 を提供する ●
down(sem) セマフォのカウンタを減少させる。0 未満になるような場合は、待ち行列に入る ● up(sem) セマフォのカウンタを増加させ、待ち行列のスレッドを実行可能にする 24
25.
生産者・消費者問題 簡単な実装例としては、以下のようなものが考え付く process producer() { start: item
= produce(); if (count == Size) sleep(); enqueue(item); count = count + 1; if (count == 1) notify(consumer); goto start; } process consumer() { start: if (count == 0) sleep(); item = dequeue(); count = count - 1; if (count == Size - 1) notify(producer); consume(item); goto start; } 25
26.
生産者・消費者問題 セマフォを使って書き直すと次のようになる procedure producer() { start: item
= produce(); down(empty); enqueue(item); up(filled); } procedure consumer() { start: down(filled); item = dequeue(); up(empty); consume(item); } semaphore filled = 0; semaphore empty = Size; 26
27.
スターベーション (飢餓状態) 複数のプロセスが待機状態から復帰するとき、スケジューラの実装 (や優先度)
によって はいつまでも復帰できないプロセスが出てきてしまう。このような状態を飢餓状態という 一般に、スケジューラは公平性 (Fairness) を考慮 して、待機させるプロセスを選択する必要がある P1 P2 C1 C2 たとえば、優先度が低かったと するといつまでも再開できない 可能性がある 27
28.
第9回 まとめ ● 並列処理と排他制御 ○
クリティカルセクション ○ 同期プリミティブ: Test and Set, Compare and Swap ○ ミューテックス, スピンロック ○ 食事する哲学者問題 , デッドロック, 資源の優先順位に関する説明 ○ セマフォ, 生産者・消費者問題 ○ スターベーションと公平性 28
Download now