スレッドセーフ

スレッドセーフ: thread-safe)は、マルチスレッドプログラミングにおける概念である。あるプログラムコードがスレッドセーフであるという場合、そのコードを複数のスレッドが同時並行的に実行しても問題が発生しないことを意味する[1]。特に、ある共有データへの複数のスレッドによる読み書きアクセスがあるとき、一度に1つのスレッドのみがその共有データにアクセスするようにして安全性を確保しなければならない。スレッドセーフでないコードを同時並行的に実行すると、データ競合による未定義動作を引き起こしたり、競合状態(レースコンディション)による意図しない動作を引き起こしたりする。場合によっては深刻なセキュリティホール(脆弱性)が引き起こされることもある[2]

概要

スレッドセーフはマルチスレッドプログラミングにおける重要な要素である。それは従来、オペレーティングシステムの開発者だけが考慮しなければならない問題だったが、1990年代後半には一般的な問題となった[注釈 1]。マルチスレッドプログラムでは、複数のスレッドが同じアドレス空間内で同時に実行される。各スレッドのアクセスするメモリ領域が特に制限されることはなく、全スレッドが全アドレス空間にアクセスできる。異なるスレッドが同時に同じメモリ領域に読み取りアクセスする場合は問題にならないが、異なるスレッドが同時に同じメモリ領域に読み書きアクセスする場合(少なくともどちらか一方のスレッドが書き込みアクセスする場合)は競合の問題が発生しうる。また、スレッドがどのような順番で実行され、データアクセスがどのような順序で発生するかは、オペレーティングシステムのスケジューリング仕様や、実行時の計算資源の利用状況などといった外因次第であり、完全に予期・予測することはできず非決定論的な動作をする。従って、静的コード解析だけでスレッドに関するプログラム上の誤りを見つけるのは困難となる。マルチスレッド環境では、そのような理論上起こりうる状況を考慮し、調停のための排他制御をするなど、慎重なプログラミングが求められる。

データ競合のようなスレッドに関する誤りを含むプログラムは、前述のように異常動作や誤動作を引き起こしうる。スレッドセーフとは、そのような意図しない動作を発生させないことを保証するための、コード実行の安全性に関わる指標である。

しかし、ある操作をスレッドセーフにするためには相応の時間的・空間的オーバーヘッドを伴うため、プログラム上のありとあらゆる操作をスレッドセーフにしようとすることは現実的ではない。不必要な排他制御はプログラムのパフォーマンス低下を招く[4]。例えば単一のスレッドからしかアクセスされないことが分かりきっているデータ領域へのアクセスや、すべてのスレッドから読み取りアクセスのみされる完全定数データ領域へのアクセスを排他制御しようとするのは完全に無駄である。そのため、実際に複数のスレッドによって同時に読み書きアクセスが実行されうるコード領域(危険領域、クリティカルセクション)に関してのみスレッドセーフ化する。

スレッドセーフかどうかの判断基準

あるコードの断片がスレッドセーフかどうかを判断するのは簡単ではない。しかし、以下のような点に注意して調べることで問題が見つかることが多い。

スタック上の変数のみを使用し、引数にのみ依存し、同様な特性のサブルーチンしか呼ばないならば、そのサブルーチンはリエントラントであり、スレッドセーフである。このようなサブルーチンは「純関数; pure function」などと呼ばれることもあり、数学の関数によく似ている。

静的コード解析ツールの中には、プログラムの並行性に関するバグをある程度検出してくれるものもあり、スレッドセーフでないコードに対して警告を出す[5]

スレッドセーフの実現手法

スレッドセーフを実現する方法として以下のようなものがある。

リエントラント
リエントラント化することでスレッドセーフを実現できるが、広域変数などを使った状態情報のセーブができない。
相互排他
共有データへのアクセスをシリアライズ(逐次化)することでスレッドセーフを実現する。ただし、複数の共有データにアクセスする際には十分に注意しなければならない(排他制御参照)。複数のスレッドがお互いに異なるリソースをロックし合うと、デッドロックが発生することがある。
スレッドローカルデータ
例えばスレッドの識別子(番号)をキーとして広域変数をスレッドごとに持たせることで、サブルーチンを超えた範囲で変数を保持できるようにする。各変数にアクセスするサブルーチン自体はリエントラントではないが、特定のスレッドだけが特定の広域変数にアクセスすることが保証できれば、スレッドセーフとなる。
アトミック操作
共有データを何らかのアトミック(不可分)な操作でアクセスすることで他のスレッドから同時アクセスされないことを保証する。これは一般に特別な命令を必要とするが、そのようなハードウェア的な支援を必要としない純粋なソフトウェア的な解としてランポートのパン屋のアルゴリズムのように、ライブラリがそのような機能をサポートしている場合がある。アトミック操作は多くの排他機構の基盤となっている。

一般的にはこれらの手法に以下の手法を結合して使用する。

  • 共有データのスレッド固有のコピーを使用し、そのコピーの値で共有データをアトミックにアップデートする。このようにすることでコードの大部分は並行して実行可能となり、必要最小限の部分だけがシリアライズされる。

なお、ファイルのようなシステム共有リソースに関しては、同じプロセス内で動作する他のスレッドだけでなく、別のプロセス内で動作する他のスレッドからもアクセスされる可能性がある。そのため、場合によっては単にスレッドセーフにするだけでは不十分であり、必要に応じてプロセス間で排他制御する(ファイルロックも参照)。

脚注

注釈

  1. ^ POSIXスレッド(Pthreads)が最初に標準化されたのはIEEE Std 1003.1c-1995である[3]。またMicrosoft WindowsではWindows 95およびWindows NTWin32 APIにおいてスレッドが導入された。
  2. ^ JavaC#にはグローバル変数は存在しないが、静的フィールドが該当する。

出典

関連項目

外部リンク

以下、英文

Read other articles:

Portland, OregonKotaCity of PortlandBerkas:Pioneer-SquareDaytime.jpg1960sDari atas: Lanskap kota dan Mount Hood dari Pittock Mansion, St. Johns Bridge, Oregon Convention Center, Union Station dan U.S. Bancorp Tower, Pioneer Courthouse Square, Tilikum Crossing BenderaLambangJulukan: Rose City; Stumptown; PDX; lihat Nama Panggilan untuk Portland, Oregon untuk daftar yang lebih lengkap.Peta interaktif PortlandKoordinat: 45°31′12″N 122°40′55″W / 45.52000°N 122.6819...

 

Halaman ini berisi artikel tentang novel E. M Forster. Untuk kegunaan lain, lihat Room with a View (disambiguasi). Artikel ini bukan mengenai A Room of One's Own. A Room with a View Sampul edisi IndonesiaPengarangE. M. ForsterNegaraBritania RayaBahasaInggrisGenreNovelPenerbitEdward ArnoldTanggal terbit1908Jenis mediaCetak (sampul keras)Halaman321 A Room with a View adalah sebuah novel tahun 1908 karya penulis Inggris E. M. Forster, tentang seorang wanita muda dalam budaya era Adward...

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目需要补充更多来源。 (2018年3月17日)请协助補充多方面可靠来源以改善这篇条目,无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:羅生門 (電影) — 网页、新闻、书籍、学术、图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。 �...

العلاقات الشمال مقدونية المدغشقرية شمال مقدونيا مدغشقر   شمال مقدونيا   مدغشقر تعديل مصدري - تعديل   العلاقات الشمال مقدونية المدغشقرية هي العلاقات الثنائية التي تجمع بين شمال مقدونيا ومدغشقر.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة �...

 

Andy Biggs Andrew Steven Biggs[1] (lahir 7 November 1958) adalah seorang jaksa dan politikus Amerika Serikat. Berasal dari Partai Republik, ia menjabat sebagai anggota DPR Referensi ^ Andy Biggs' Biography. Project Vote Smart. Diakses tanggal January 6, 2014.  Pranala luar Wikimedia Commons memiliki media mengenai Andy Biggs. Congressman Andy Biggs official U.S. House website Campaign website Andy Biggs di Curlie (dari DMOZ) Kemunculan di C-SPAN Biografi di Biographical Directory...

 

Edition of USA college basketball tournament 1988 NCAA Division Imen's basketball tournamentSeason1987–88Teams64Finals siteKemper ArenaKansas City, MissouriChampionsKansas Jayhawks (2nd title, 5th title game,8th Final Four)Runner-upOklahoma Sooners (2nd title game,3rd Final Four)SemifinalistsArizona Wildcats (1st Final Four)Duke Blue Devils (6th Final Four)Winning coachLarry Brown (1st title)MOPDanny Manning (Kansas)Attendance558,998Top scorerDanny Manning (Kansas)(163 points) NCAA Divi...

Torneo di Viareggio 201365ª Coppa Carnevale Competizione Torneo di Viareggio Sport Calcio Edizione 65ª Organizzatore CGC Viareggio Date 11 febbraio - 25 febbraio 2013 Luogo  Italia Partecipanti 48 Sito web http://www.viareggiocup.com/home.html Risultati Vincitore  Anderlecht(1° titolo) Secondo  Milan Statistiche Miglior giocatore Bryan Cristante Miglior marcatore Gergely Bobál (5) Simone Ganz Daniel J. Martínez Luigi Canotto Eric Lanini Miglior portiere Dav...

 

† Человек прямоходящий Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:Синапсиды�...

 

Turkish footballer Nihat Kahveci Nihat Kahveci (2016)Personal informationFull name Nihat KahveciDate of birth (1979-11-23) 23 November 1979 (age 44)Place of birth Istanbul, Turkey[1]Height 1.75 m (5 ft 9 in)Position(s) Winger/ForwardYouth career1994–1996 Esenler[2]1996–1997 BeşiktaşSenior career*Years Team Apps (Gls)1997–2002 Beşiktaş 114 (27)2002–2006 Real Sociedad 133 (58)2006–2009 Villarreal 62 (18)2009–2011 Beşiktaş 34 (3)Total 343 (10...

Questa voce sull'argomento cestisti statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Nolan Smith Smith in azione con la maglia di Duke Nazionalità  Stati Uniti Altezza 188 cm Peso 84 kg Pallacanestro Ruolo Vice-allenatore (ex playmaker) Squadra  Louisville Cardinals Termine carriera 2016 - giocatore CarrieraGiovanili ?-2007Oak Hill Academy2007-2011 Duke Blue Devils143 (1.911...

 

North-South Korean border barrier This article's lead section may be too short to adequately summarize the key points. Please consider expanding the lead to provide an accessible overview of all important aspects of the article. (May 2024) Korean Demilitarized Zone한반도 비무장 지대Korean Peninsula View of the North from the southern side of the Joint Security AreaThe Korean DMZ denoted by the red highlighted area. The blue line indicates the international border. The four incursion t...

 

1985 film by Sydney Pollack For the migration of humans to other continents, see Recent African origin of modern humans. For the 1937 memoir by Danish author Karen Blixen, see Out of Africa. For other uses, see Out of Africa (disambiguation). Out of AfricaTheatrical release posterDirected bySydney PollackScreenplay byKurt LuedtkeBased onOut of Africaby Isak DinesenIsak Dinesen: The Life of a Story Tellerby Judith ThurmanSilence Will Speakby Errol TrzebinskiProduced bySydney PollackKim Jorgens...

Month of 1974 1974 January February March April May June July August September October November December << February 1974 >> Su Mo Tu We Th Fr Sa 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 February 1, 1974: High-rise building fire kills 185 people in Brazil The following events occurred in February 1974: February 1, 1974 (Friday) A fire killed 177 people and injured 293 others in the 23-story Joelma Building at São Paulo in Brazil. Another...

 

Частина серії проФілософіяLeft to right: Plato, Kant, Nietzsche, Buddha, Confucius, AverroesПлатонКантНіцшеБуддаКонфуційАверроес Філософи Епістемологи Естетики Етики Логіки Метафізики Соціально-політичні філософи Традиції Аналітична Арістотелівська Африканська Близькосхідна іранська Буддій�...

 

Display that can reproduce a wider gamut color than conventional displays Multi-primary color (MPC) display is a display that can reproduce a wider gamut of color than conventional displays. In addition to the standard RGB (Red Green and Blue) color subpixels, the technology utilizes additional colors, such as yellow, magenta and cyan, and thus increases the range of displayable colors that the human eye can see.[1][2] Sharp's Quattron is the brand name of an LCD color display...

تشكنه چكنه  - city -  تقسيم إداري البلد  إيران المحافظة خراسان رضوي المقاطعة مقاطعة نيسابور الناحية Sarvelayat إحداثيات 36°49′04″N 58°30′15″E / 36.81778°N 58.50417°E / 36.81778; 58.50417 السكان التعداد السكاني 1363 نسمة (إحصاء 2006) معلومات أخرى التوقيت توقيت إيران (+3:30 غرينيتش) توق...

 

منتخب النمسا تحت 21 سنة لكرة القدم بلد الرياضة النمسا  الفئة كرة قدم تحت 21 سنة للرجال  [لغات أخرى]‏  رمز الفيفا AUT  المدرب فيرنر غريغوريتش  القائد كيفين دانسو  مشاركات تعديل مصدري - تعديل   منتخب النمسا تحت 21 سنة لكرة القدم هو الممثل الرسمي للنمسا في بطول...

 

Ini adalah nama Tionghoa-Indonesia, marganya adalah Gunawan (吴) Tony Gunawan吴俊明Informasi pribadiKebangsaanIndonesiaLahir9 April 1975 (umur 49)Surabaya, IndonesiaTinggi175 cm (5 ft 9 in)Ganda PriaPeringkat saat ini12 (9 Juni 2011) Rekam medali Badminton Mewakili  Indonesia Olimpiade 2000 Sydney Ganda putra World Championships 2001 Seville Men's doubles Mewakili  Amerika Serikat World Championships 2005 Anaheim Men's doubles Pan American Games 2011 Gua...

Cyperus fuscus Klasifikasi ilmiah Kerajaan: Plantae (tanpa takson): Tracheophyta (tanpa takson): Angiospermae (tanpa takson): Monokotil (tanpa takson): Komelinid Ordo: Poales Famili: Cyperaceae Genus: Cyperus Spesies: Cyperus fuscus Nama binomial Cyperus fuscusL. Cyperus fuscus adalah spesies tumbuhan yang tergolong ke dalam famili Cyperaceae. Spesies ini juga merupakan bagian dari ordo Poales. Spesies Cyperus fuscus sendiri merupakan bagian dari genus Cyperus.[1] Nama ilmiah dari sp...

 

Questa voce o sezione sull'argomento aziende italiane non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Comerio ErcoleLogo Stato Italia Forma societariaSocietà per azioni Fondazione1885 a Busto Arsizio Fondata daErcole Comerio Sede principaleBusto Arsizio Persone chiaveRoberto MarcoraTeresa Marcor...