Help us understand the problem. What is going on with this article?

sharedのcastについて

More than 1 year has passed since last update.

sharedをつけてもいい場合

  • キャスト以降は共有資源として扱う
  • キャスト以降も単一のスレッドからしか触らないデータである

sharedをつけるということは、共有資源にする場合です。
共有資源であることが明らかである場合、cast(shared)とすることでsharedをつけることができます。
共有資源であるということは、時系列的に見てcast(shared)した瞬間からその変数のアクセスはすべて共有資源に対する取り扱いをしなければなりません。
また、例外的に単一のスレッドからしか触らないことが明らかな場合でも、sharedをつけることによる弊害はありません。しかしながら、これをやる利点は後述するsharedメンバ関数が呼べる、という程度ですので、必要かどうか十分考えてから行いましょう。

auto sobj = cast(shared)obj;

sharedを外してもいい場合

  • キャスト以降は単一のスレッドからしか触らないデータである
  • キャストするのがクリティカルセクション内である

sharedを外すということは、付ける場合とは逆に、スレッドローカルなデータになるということです。
スレッドローカルなデータは、単一のスレッドからしかアクセスすることが許されないデータです。
cast()を行うことでsharedを取り外すことができますが、それ以降は単一のスレッドでしか触らないようにしましょう。
そのデータに対するクリティカルセクション内では、限定的にこれが許されますが、クリティカルセクションを抜けた瞬間に「sharedをつけてもいい場合」の条件を満たすようにする必要があります。

auto obj = cast()sobj;

スレッドローカルなオブジェクトのsharedメンバ関数を呼びたい場合

これは、「sharedをつけてもいい場合」と条件は同じで、cast(shared)すればいいです。

(cast(shared)obj).foo();

共有資源のオブジェクトのsharedじゃないメンバ関数を呼びたい場合

これは、「sharedを外してもいい場合」と条件は同じでで、cast()すればいいです。

auto str = (cast()sobj).toString();
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした