July 08, 2012
  Branch: refs/heads/master
  Home:   https://github.com/D-Programming-Language/druntime
  Commit: b78aaa336de470cc723ac23b09a29bf68e822d1f
      https://github.com/D-Programming-Language/druntime/commit/b78aaa336de470cc723ac23b09a29bf68e822d1f
  Author: alexrp <xtzgzorex@gmail.com>
  Date:   2012-07-06 (Fri, 06 Jul 2012)

  Changed paths:
    M import/core/thread.di
    M src/core/thread.d

  Log Message:
  -----------
  core.thread: Implement critical regions.

(Not to be confused with critical sections.)

Critical regions are areas of code where a thread absolutely must not be suspended. Entering and exiting a critical region is very similar to acquiring and releasing a mutex, but critical regions do not block. They simply ensure that when the world is stopped, a thread will not be suspended inside critical code; i.e. it will be continually suspended and resumed until it is no longer in a critical region.

This feature is useful to maintain invariants in garbage collectors where you would normally use a lock. Empirically, it only happens very rarely that a thread is suspended inside a critical region, so the suspend/resume loop is a cheaper approach than always locking, since locking results in high contention.

The way this commit implements critical regions, they are useful beyond garbage collection, however; they are not specifically coupled to any GC code.

Using critical regions is extremely error-prone. For instance, using a lock inside a critical region will most likely result in an application deadlocking because the stop-the-world routine will attempt to suspend and resume the thread forever, to no avail. This means that you really shouldn't be messing with this feature unless you *really* do know what you're doing.


  Commit: cf02a4327313a347a49a5f5fa46eb63e01946dd4
      https://github.com/D-Programming-Language/druntime/commit/cf02a4327313a347a49a5f5fa46eb63e01946dd4
  Author: alexrp <xtzgzorex@gmail.com>
  Date:   2012-07-06 (Fri, 06 Jul 2012)

  Changed paths:
    M import/core/thread.di
    M src/core/thread.d

  Log Message:
  -----------
  Document that critical regions are error-prone.


  Commit: 7cc048adce5e495edb2b6a109385be6ada8cda68
      https://github.com/D-Programming-Language/druntime/commit/7cc048adce5e495edb2b6a109385be6ada8cda68
  Author: alexrp <alex@lycus.org>
  Date:   2012-07-08 (Sun, 08 Jul 2012)

  Changed paths:
    M src/core/thread.d

  Log Message:
  -----------
  Kill unnecessary docs in thread.d.


  Commit: 8f8bc9b98d37a2e7f259f56b067048a479c1440e
      https://github.com/D-Programming-Language/druntime/commit/8f8bc9b98d37a2e7f259f56b067048a479c1440e
  Author: alexrp <alex@lycus.org>
  Date:   2012-07-08 (Sun, 08 Jul 2012)

  Changed paths:
    M import/core/thread.di

  Log Message:
  -----------
  Add reference to Mono's critical regions.


  Commit: 49b453e5cb1baa968b63d23ce107950ba93a34b1
      https://github.com/D-Programming-Language/druntime/commit/49b453e5cb1baa968b63d23ce107950ba93a34b1
  Author: alexrp <alex@lycus.org>
  Date:   2012-07-08 (Sun, 08 Jul 2012)

  Changed paths:
    M import/core/thread.di

  Log Message:
  -----------
  Make critical region functions undocumented for now.


  Commit: 1da26de4c5b74edb055e263fec3cca0d89551fcd
      https://github.com/D-Programming-Language/druntime/commit/1da26de4c5b74edb055e263fec3cca0d89551fcd
  Author: Andrei Alexandrescu <andrei@erdani.com>
  Date:   2012-07-08 (Sun, 08 Jul 2012)

  Changed paths:
    M import/core/thread.di
    M src/core/thread.d

  Log Message:
  -----------
  Merge pull request #204 from alexrp/thread-critical-regions

core.thread: Implement critical regions.


Compare: https://github.com/D-Programming-Language/druntime/compare/fcab51193a98...1da26de4c5b7