디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

스레드 세이프한 관리객체 구조를 만들어봤는데...

SODMaster갤로그로 이동합니다. 2012.01.31 12:54:41
조회 74 추천 0 댓글 3

// TestProject.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include "AutoLockInc.h"
#include "CriticalSectionInc.h"
#include "SRWLockInc.h"

#include <list>
#include <algorithm>

class CData
{
public:
        CData(VOID)
        {
        }
        
        ~CData(VOID)
        {
        }
};

#define THREAD_SAFE_CODE(THREAD_SAFE, SAFE_CODE, CODE) \
        if (THREAD_SAFE) \
        { SAFE_CODE CODE }\
        else \
        { CODE }

template <bool THREAD_SAFE = true>
class CDataMgr
{
public:
        CDataMgr(VOID)
        {
        }

        ~CDataMgr(VOID)
        {
        }

        BOOL InsertData(CData* data)
        {
                THREAD_SAFE_CODE(THREAD_SAFE, 
                BaseLib::CSRWWriteLock WriteLock(mLock);
                BaseLib::CAutoLock Lock(WriteLock);
                ,

                mDataList.push_back(data);
                return TRUE;

                )
        }

        BOOL DeleteData(CData* data)
        {
                THREAD_SAFE_CODE(THREAD_SAFE, 
                BaseLib::CSRWWriteLock WriteLock(mLock);
                BaseLib::CAutoLock Lock(WriteLock);
                ,

                std::list<CData*>::iterator iter
                        = std::find(mDataList.begin(), mDataList.end(), data);
                if (iter == mDataList.end())
                        return FALSE;

                delete *iter;
                mDataList.erase(iter);

                )
        }

        struct IDataReader
        {
                IDataReader(VOID) {}
                virtual ~IDataReader(VOID) {}
                virtual BOOL Read(CData* data) = 0;
        };

        BOOL ReadData(CData* data, IDataReader& dataReader)
        {
                THREAD_SAFE_CODE(THREAD_SAFE, 
                BaseLib::CSRWReadLock ReadLock(mLock);
                BaseLib::CAutoLock Lock(ReadLock);


                CData* Data = Find(data);
                if (!Data)
                        return FALSE;

                return dataReader.Read(data);

                )
        }

private:
        CData* Find(CData* data)
        {
                std::list<CData*>::iterator iter
                        = std::find(mDataList.begin(), mDataList.end(), data);
                if (iter == mDataList.end())
                        return NULL;
                return *iter;
        }

private:
        std::list<CData*> mDataList;
        BaseLib::CSRWLock mLock;
};


int _tmain(int argc, _TCHAR* argv[])
{
        CData* data = new CData;

        CDataMgr<true> DataMgr;

        DataMgr.InsertData(data);

        struct CDataReader : public CDataMgr<true>::IDataReader
        {
                virtual BOOL Read(CData* data)
                {
                        return TRUE;
                }
        } DataReader;

        DataMgr.ReadData(data, DataReader);

        return 0;
}


매크로 인자안에 코드가 들어가 있어서 디버깅이 불편...

좋은 방법 없을까여

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 뛰어난 운동 신경으로 남자와 싸워도 이길 것 같은 여자 스타는? 운영자 25/11/24 - -
이슈 [디시人터뷰] 충무로가 주목하는 신예, '세계의 주인' 서수빈 운영자 25/11/24 - -
AD 대학생 필수템! What's in my Bag 운영자 25/11/21 - -
301055 오 헤드퍼스트 짱이네 [11] zaitsev갤로그로 이동합니다. 12.02.01 151 0
301054 공지 띄워 보니까 재밌다 책 춪현도 업글할겸 함 띄워보자 [29] dlbo갤로그로 이동합니다. 12.02.01 3515 31
301053 내가 자바하면서 젤 좆같았던게... [1] 캐자바까닭(115.92) 12.02.01 116 0
301052 씨바 좆 간단한 3단구성인데도 열라 어렵네 d제봘(220.117) 12.02.01 50 0
301051 프로그래밍 관련 분야가 좋은 8가지 이유 [1] 간디(59.23) 12.02.01 164 0
301050 코드좀 보고 왜 오류 생기는지 알려줘 [1] d제봘(220.117) 12.02.01 60 0
301049 <급>나좀 도와주라~웹 퍼블리셔 훃들아 이것좀 보고 왜그런지 알려죠바 [2] d제봘(220.117) 12.02.01 70 0
301048 한3시간전에글싸고방금봣는데 IMhouse갤로그로 이동합니다. 12.02.01 38 0
301047 형드라 자바서적 모가조아? [5] zaitsev갤로그로 이동합니다. 12.02.01 77 0
301046 크롬브라우져 쓰는 사람? 좀예전에 크롬업뎃 되면서 새탭 맘에 안든다 [6] 열받는다(175.116) 12.02.01 177 0
301045 아 빡침.....코딩하다 에러20개 뜸ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 롤이나 하러가야 [1] 엔투갤로그로 이동합니다. 12.02.01 72 0
301044 터보씨 하니깐 ㅋㅋㅋ C_Perl갤로그로 이동합니다. 12.02.01 49 0
301043 프로그래밍 커뮤니티가 여기말고 다른덴 없어? [13] 돌아이(65.49) 12.02.01 154 0
301042 퇴근안해?? C_Perl갤로그로 이동합니다. 12.02.01 40 0
301040 칼퇴하고 술 얻어먹으러 감~ 밥쳐먹는돼지(203.244) 12.02.01 34 0
301038 솔직히 여기 방전되기 3초전아냐? [2] 일산(121.157) 12.02.01 46 0
301037 프갤 살리기 프로젝트 돌입해야겠군요 [4] [성대아싸]갤로그로 이동합니다. 12.02.01 87 0
301036 아쉬 존나 바빴움 [2] C_Perl갤로그로 이동합니다. 12.02.01 51 0
301035 칼퇴근을 권유하는 짤을 뿌리겠다~!! 거칠게갤로그로 이동합니다. 12.02.01 67 0
301034 프갤 재미음따 [4] 파코즈(121.157) 12.02.01 51 0
301033 to 캐xx닭 [12] 난쟁이오크갤로그로 이동합니다. 12.02.01 79 0
301031 퇴근 12분 전이다 무조껀 칼퇴근하자!@!! [5] 거칠게갤로그로 이동합니다. 12.02.01 73 0
301030 한국 IT 시망 선언문 [2] 거칠게갤로그로 이동합니다. 12.02.01 97 0
301029 대세는 자바 [2] (210.113) 12.02.01 120 0
301028 이번엔 공지 확인후 조치한다캄. ㅡ,.ㅡ;;;;; - 떠따 떠따 떠따 [3] dlbo갤로그로 이동합니다. 12.02.01 51 0
301027 대세는 자바 [1] (210.113) 12.02.01 42 0
301026 jsp공부를 시작하는데 뭐 이렇게 시작이 복잡하지 [11] 조성훈(203.237) 12.02.01 105 0
301025 ●프갤 살리기 운동 [2] Gavi_cp갤로그로 이동합니다. 12.02.01 50 0
301024 공지 올릴꺼 글 고치라고 퇴짜맞았음 [3] dlbo갤로그로 이동합니다. 12.02.01 42 0
301023 프갤러들은 몇살? [4] Gavi_cp갤로그로 이동합니다. 12.02.01 76 0
301021 DDR을 했는데 길쭉한 젤라틴이 나오면 이게 뭐냐?? [6] 거칠게갤로그로 이동합니다. 12.02.01 89 0
301020 공부할게 산더민데 Gavi_cp갤로그로 이동합니다. 12.02.01 33 0
301019 노트북가지고 밤샐 조용한 장소 추천좀... [13] ㅁㄴㅇ(175.116) 12.02.01 114 0
301018 으아아아앙아아 [12] Gavi_cp갤로그로 이동합니다. 12.02.01 63 0
301017 개발자한테 국내에서 제일 좋은 회사가 어디임? [2] (211.44) 12.02.01 104 0
301016 프겔 공지는 어찌 된거냐?? [3] 거칠게갤로그로 이동합니다. 12.02.01 47 0
301015 아이폰 잼따 핡핡 [9] 캐앱등이닭(115.92) 12.02.01 75 0
301014 지방을 안먹을 순 없으니 오리고기에서 지방을 섭취해야지 SODMaster갤로그로 이동합니다. 12.02.01 40 0
301013 글 리젠을 폭파시켜보자 슴규 달려라 [2] dlbo갤로그로 이동합니다. 12.02.01 58 0
301012 C언어 기초 독학중인데 질문입니다! [18] 엉엉(61.72) 12.02.01 122 1
301011 갑자기 격하게 코레일에 취업하고 싶다. [6] 거칠게갤로그로 이동합니다. 12.02.01 103 0
301010 한국장학재단 홈피 나만이런건가? [3] 엔투갤로그로 이동합니다. 12.02.01 67 0
301009 오오미 코레일? 코레일이면 공무원 아닌감? >.<;; [4] 거칠게갤로그로 이동합니다. 12.02.01 166 0
301008 이런 니미 메일이 병진 같이 간다 -_- [3] 거칠게갤로그로 이동합니다. 12.02.01 36 0
301007 뉴비라 신중히 글싸는겁니다. 적당히 나대지않는 느낌으로. [3] 엔투갤로그로 이동합니다. 12.02.01 47 0
301006 내가 글 안싼다고 글 리젠률 봐라 [3] dlbo갤로그로 이동합니다. 12.02.01 55 0
301005 소통이 실시간으로 원활한곳 .....이리로 [1] 로또로(218.159) 12.02.01 46 0
301004 배열을 ArrayList 로 구현해야하는데 [5] 엔투갤로그로 이동합니다. 12.02.01 89 0
301003 게임만들때 [3] IMhouse갤로그로 이동합니다. 12.02.01 58 0
301002 오랜만 [4] 힙꼬맹갤로그로 이동합니다. 12.02.01 50 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2