classtk_1_1_mutex.tex 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. \doxysection{tk::Mutex クラス}
  2. \label{classtk_1_1_mutex}\index{tk::Mutex@{tk::Mutex}}
  3. 所有権・優先度順ウェイクアップ・\+RAII 対応のミューテックス (排他ロック)
  4. {\ttfamily \+\#include $<$sync.\+hpp$>$}
  5. \doxysubsubsection*{公開メンバ関数}
  6. \begin{DoxyCompactItemize}
  7. \item
  8. \textbf{ Mutex} ()=default
  9. \item
  10. void \textbf{ lock} ()
  11. \begin{DoxyCompactList}\small\item\em ミューテックスをロックします (空くまでブロック待機) \end{DoxyCompactList}\item
  12. bool \textbf{ try\+\_\+lock} ()
  13. \begin{DoxyCompactList}\small\item\em ミューテックスのロックを試みます (ノンブロッキング) \end{DoxyCompactList}\item
  14. void \textbf{ unlock} ()
  15. \begin{DoxyCompactList}\small\item\em ミューテックスのロックを解除します \end{DoxyCompactList}\item
  16. bool \textbf{ is\+\_\+locked} () const
  17. \end{DoxyCompactItemize}
  18. \doxysubsection{詳解}
  19. 所有権・優先度順ウェイクアップ・\+RAII 対応のミューテックス (排他ロック)
  20. 共有リソースやペリフェラルへの同時アクセスを防止します。 ロックしたタスク本人以外の誤った {\ttfamily \doxyref{unlock()}{p.}{classtk_1_1_mutex_ae8d5dfd5655b5aa54d63db6e0cf2f707}} は安全に無視されます。 C++ の {\ttfamily Basic\+Lockable} を満たしており、{\ttfamily std::\+lock\+\_\+guard} や {\ttfamily \doxyref{tk::\+\+Lock\+Guard}{p.}{classtk_1_1_lock_guard}} が利用可能です。
  21. \begin{DoxyCode}{0}
  22. \DoxyCodeLine{tk::Mutex\ mtx;}
  23. \DoxyCodeLine{}
  24. \DoxyCodeLine{\{}
  25. \DoxyCodeLine{\ \ \ \ tk::LockGuard<tk::Mutex>\ lock(mtx);}
  26. \DoxyCodeLine{\ \ \ \ \textcolor{comment}{//\ クリティカルセクション...}}
  27. \DoxyCodeLine{\}\ \textcolor{comment}{//\ 自動でアンロック}}
  28. \end{DoxyCode}
  29. \label{classtk_1_1_mutex_doc-constructors}
  30. \doxysubsection{構築子と解体子}
  31. \index{tk::Mutex@{tk::Mutex}!Mutex@{Mutex}}
  32. \index{Mutex@{Mutex}!tk::Mutex@{tk::Mutex}}
  33. \doxysubsubsection{Mutex()}
  34. {\footnotesize\ttfamily \label{classtk_1_1_mutex_a8b17431db60f4ab48a3859b2ca722eb1}
  35. tk::\+\+Mutex::\+\+Mutex (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [default]}}
  36. \label{classtk_1_1_mutex_doc-func-members}
  37. \doxysubsection{関数詳解}
  38. \index{tk::Mutex@{tk::Mutex}!is\_locked@{is\_locked}}
  39. \index{is\_locked@{is\_locked}!tk::Mutex@{tk::Mutex}}
  40. \doxysubsubsection{is\_locked()}
  41. {\footnotesize\ttfamily \label{classtk_1_1_mutex_acf574e35540879481f1f6e5452a504ab}
  42. bool tk::\+\+Mutex::\+is\+\_\+locked (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [inline]}}
  43. 現在ロックされているかどうかを判定 \index{tk::Mutex@{tk::Mutex}!lock@{lock}}
  44. \index{lock@{lock}!tk::Mutex@{tk::Mutex}}
  45. \doxysubsubsection{lock()}
  46. {\footnotesize\ttfamily \label{classtk_1_1_mutex_a7f5645bba55df2db263f92a954802c27}
  47. void tk::\+\+Mutex::\+lock (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
  48. ミューテックスをロックします (空くまでブロック待機)
  49. 他のタスクが保持している場合は、解放されるまで自タスクを {\ttfamily State::\+\+Blocked} にして休止します。 \index{tk::Mutex@{tk::Mutex}!try\_lock@{try\_lock}}
  50. \index{try\_lock@{try\_lock}!tk::Mutex@{tk::Mutex}}
  51. \doxysubsubsection{try\_lock()}
  52. {\footnotesize\ttfamily \label{classtk_1_1_mutex_a666dd03fb22c5cb855e3145f76a58b9c}
  53. bool tk::\+\+Mutex::\+try\+\_\+lock (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
  54. ミューテックスのロックを試みます (ノンブロッキング)
  55. \begin{DoxyReturn}{戻り値}
  56. true ロック獲得成功
  57. false 他のタスクが保持しているため獲得失敗 (ブロックせず即座に復帰)
  58. \end{DoxyReturn}
  59. \index{tk::Mutex@{tk::Mutex}!unlock@{unlock}}
  60. \index{unlock@{unlock}!tk::Mutex@{tk::Mutex}}
  61. \doxysubsubsection{unlock()}
  62. {\footnotesize\ttfamily \label{classtk_1_1_mutex_ae8d5dfd5655b5aa54d63db6e0cf2f707}
  63. void tk::\+\+Mutex::\+unlock (\begin{DoxyParamCaption}{}{}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [inline]}}
  64. ミューテックスのロックを解除します
  65. ロックを保持しているタスク本人だけが解除できます。 待機中のタスクが存在する場合、最も優先度が高いタスクを 1 つ起床させます。
  66. このクラス詳解は次のファイルから抽出されました:\begin{DoxyCompactItemize}
  67. \item
  68. C:\+/\+\+Users/\+yoneda/\+\+Documents/\+\+Pico\+\_\+\+Projects/\+tinykernel/\+tinykernel/\+include/\+tinykernel/\textbf{ sync.\+hpp}\end{DoxyCompactItemize}