사용자 도구

사이트 도구


kb:softwaretransactionalmemory

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:softwaretransactionalmemory [2014/11/09 20:41] (현재)
줄 1: 줄 1:
 +====== Software Transactional Memory ======
 +<code c#>
 +static void Main()
 +{
 +    double myAccount;
 +    double yourAccount;​
 +
 +    myAccount = 1000;
 +    yourAccount = 500;
 +
 +    double amountToTransfer = 150;
 +    myAccount -= amountToTransfer;​
 +    yourAccount += amountToTransfer;​
 +}
 +</​code>​
 +
 +스레드 세이프하지 않은 코드. +- 하는 부분에서 다른 스레드가 끼어들면 콩가루 된다.
 +
 +<code c#>
 +static void Main(string[] args)
 +{
 +    INstmObject<​double>​ myAccount;
 +    INstmObject<​double>​ yourAccount;​
 +
 +    myAccount = NstmMemory.CreateObject<​double>​(1000);​
 +    yourAccount = NstmMemory.CreateObject<​double>​(500);​
 +
 +    using (INstmTransaction tx = NstmMemory.BeginTransaction())
 +    {
 +        double amountToTransfer = 150;
 +
 +        myAccount.Write(myAccount.Read() - amountToTransfer);​
 +        yourAccount.Write(yourAccount.Read() + amountToTransfer);​
 +
 +        tx.Commit();​
 +    }
 +
 +    Console.WriteLine("​My account balance: {0}", myAccount.Read());​
 +    Console.WriteLine("​Your account balance: {0}", yourAccount.Read());​
 +}
 +</​code>​
 +
 +STM을 통해 스레드 세이프해진 코드. 즉 로직 자체는 건드리지 않으면서 스레드 세이프한 코드를 만드는 데 도움을 주는 장치...라는 느낌. 위키피디어의 설명을 옮겨 보자면...
 +
 +//In computer science, software transactional memory (STM) is a concurrency control mechanism analogous to database transactions for controlling access to shared memory in concurrent computing. It functions as an alternative to lock-based synchronization,​ and is typically implemented in a lock-free way.//
 +
 +즉 [[ThreadProgramming]]이 보편화됨에 따라, 기존의 락을 이용하는 동기화 방식이 너무 복잡하다고 여겨져 나온 대안 정도라는 말이 되겠다.
 + 
 +
 +====== 링크 ======
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​03/​software-transactional-memory-making-multithreading-easier.aspx | Software Transactional Memory - Making multithreading easier]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​04/​software-transactional-memory-ii-isolation-of-changes-to-transactional-objects.aspx | Software Transactional Memory II - Isolation of Changes to Transactional Objects]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​05/​software-transactional-memory-iii-making-transactions-atomic.aspx | Software Transactional Memory III - Making Transactions Atomic]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​06/​software-transactional-memory-iv-thread-bound-transactions.aspx | Software Transactional Memory IV - Thread-Bound Transactions]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​10/​software-transactional-memory-v-integration-with-system-transactions.aspx | Software Transactional Memory V - Integration with System.Transactions]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​07/​12/​software-transactional-memory-vi-becoming-aspect-oriented-with-postsharp.aspx | Software Transactional Memory VI - Becoming Aspect Oriented with PostSharp]]
 +  * [[http://​weblogs.asp.net/​ralfw/​archive/​2007/​08/​05/​software-transactional-memory-vii-automatic-retry-of-failed-transactions.aspx | Software Transactional Memory VII - Automatic retry of failed transactions]]
 +
 +  * [[http://​www.calumgrant.net/​atomic/​]]
 +  * [[http://​www.ddj.com/​cpp/​202802978 | Transactional Programming]]
 +
 +----
 +  * see also [[ThreadProgramming]],​ [[ThreadSynchronization]]
  
kb/softwaretransactionalmemory.txt · 마지막으로 수정됨: 2014/11/09 20:41 (바깥 편집)