본문 바로가기

POSA25

POSA2, Double-Checked Locking Optimization 패턴 이 녀석도 그렇게 대단한 놈은 아니지만, 멀티 스레드 환경에서 Singleton 을 사용하는 경우라면 꼭 기억해 둘 필요가 있겠다. 내 경우 Delphi 에서 보통 다음처럼 Singleton 을 작성한다. ### delphi TSingleton = class protected class var Instance: TSingleton; constructor Create; destructor Destroy; override; public class function GetInstance: TSingleton; class procedure ReleaseInstance; end; { TSingleton } constructor TSingleton.Create; begin inherited; end; destruct.. 2012. 4. 9.
POSA2, Scoped Locking, Strategized Locking 패턴 POSA2 의 동기화 관련 패턴들 중 가장 기본이라고 할 수 있는 Scoped Locking 은 사실 별 거 없다. 이런걸 굳이 패턴으로 불러야하나....싶은 부류 중 하나이다. 닥치고 소스~### delphi TGuard = class protected FLock: TSynchroObject; FOwner: Boolean; public constructor Create(ALock: TSynchroObject); destructor Destroy; override; procedure Acquire; procedure Release; end; { TGuard } procedure TGuard.Acquire; begin if Assigned(FLock) then begin FLock.Acquire; FOwn.. 2012. 4. 5.
Delphi 에서 Leader-Follower 패턴 구현 POSA2 에서 Leader-Follower 패턴의 경우 pthread 기반으로 구현하여 설명하고 있다.(2012/03/09 - [프로그래밍/Lazarus] - FPC 에서 Leader-Follower 패턴 구현) 이를 Windows 기반으로 작성해보았다. ###delphi unit DLNA.Thread; interface uses Winapi.Windows, System.SysUtils, SyncObjs; const NO_CURRENT_LEADER = 0; type TGuard = class protected FMutex: TMutex; FOwner: Boolean; public constructor Create(AMutex: TMutex); destructor Destroy; override; pro.. 2012. 3. 14.
FPC 에서 Leader-Follower 패턴 구현 FPC 에서 pthread 기반 Leader-Follower 패턴을 구현하였다. Unbound thread set 이며, 사용 용도는 Worker Thread Pool 정도~ 예외 처리 등 많이 다듬어야하지만~ 일단 관련 소스 첨부~ ###delphi unit DLNA_Thread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, pthreads; const NO_CURRENT_LEADER = 0; type TPThreadParameter = record Mutex: ppthread_mutex_t; Condition: ppthread_cond_t; Terminated: Boolean; Suspended: Boolean; Owner: TOb.. 2012. 3. 9.
POSA2, ACT 패턴 Asynchronous Completion Token 패턴의 마인드맵을 그려보았다. 개인적으로 정리한 것이고 추후 적용 과정에서 갱신해 나갈 생각이다. 클래스 다이어그램으로 표현하면, ACT 를 Command 패턴(2012/02/08 - [프로그래밍/OOP] - GoF, Command 패턴)으로 적용한다면, TCompletionHandler 가 TReceiver 에 해당하고 TACT 는 TCommand 가 된다. 이때 TInitiator 가 TInvoker 가 된다. 2012. 2. 8.