디시인사이드 갤러리

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

갤러리 본문 영역

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

SODMaster갤로그로 이동합니다. 2012.01.31 12:54:41
조회 66 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 외모와 달리 술 일절 못 마셔 가장 의외인 스타는? 운영자 24/07/01 - -
301898 ㅅㅂ 프갤은 세줄요약이 전통아님? C_Perl갤로그로 이동합니다. 12.02.06 70 0
301896 게이형들 스도쿠 알고리즘 쉬워? [3] 남대생.갤로그로 이동합니다. 12.02.06 123 0
301895 오늘은 끼지못하것다 [2] C_Perl갤로그로 이동합니다. 12.02.06 81 0
301894 밥은 먹고 겔질 하는거냐??? [2] 거칠게갤로그로 이동합니다. 12.02.06 87 0
301893 꿀레 봐라 2 C_Perl갤로그로 이동합니다. 12.02.06 70 0
301892 꿀레 봐라 [1] C_Perl갤로그로 이동합니다. 12.02.06 117 0
301891 뭐여..아직도 이러고 있는거여..? 지금 18ryu가 중요한게 아님... [15] 캐들보닭(115.92) 12.02.06 169 0
301890 18ryu가 누군가 했네.. [1] 이문동쮸쮸바갤로그로 이동합니다. 12.02.06 101 0
301882 웹프로그래밍 이렇게 배우면 호갱님이냐? [4] 길가던나그네(121.182) 12.02.06 214 0
301881 혹시 형들중에 프로그래머 산업체 간사람 있어? 정보좀 얻을 수 잇을까? [2] 공학관갤로그로 이동합니다. 12.02.06 113 0
301878 안드 usage flash_image partition file.img 추태=뉴비갤로그로 이동합니다. 12.02.06 68 0
301876 진짜 십팔류정도 근성이면 대성함 [2] 엔투갤로그로 이동합니다. 12.02.06 68 0
301873 야근 야근 야근~ 그러함(203.232) 12.02.06 33 0
301872 밤새서 숙제 땡칠도사갤로그로 이동합니다. 12.02.06 43 0
301870 프로그래밍 학원 추천 [1] 하루살이류갤로그로 이동합니다. 12.02.06 123 0
301869 18류 어디서 유입된 [4] C_Perl갤로그로 이동합니다. 12.02.06 76 0
301868 횽들 jsp 책 말인데 [1] 궈라(175.113) 12.02.06 110 0
301862 아 술먹고 감기약 먹으니까 [3] 나리링갤로그로 이동합니다. 12.02.06 2530 1
301861 DC 시스템이 나를 좋아하지 않는듯 ㅠ.ㅠ iljeomobolt갤로그로 이동합니다. 12.02.06 51 0
301860 보람찬~ 하루일을 끝마치고서~~ [1] 거칠게갤로그로 이동합니다. 12.02.06 44 0
301858 알바는 내 글 삭제한 기준이 뭐냐? [1] iljeomobolt갤로그로 이동합니다. 12.02.06 69 0
301854 아스말 나와서 생각나는 에피소드 [3] 싴보이갤로그로 이동합니다. 12.02.06 67 0
301850 게임업계 난리났구만. [2] 이문동쮸쮸바갤로그로 이동합니다. 12.02.06 184 0
301848 저기는 너무 핫하니깐 여기서 들보랑 18이랑 싸워라 [1] 거칠게갤로그로 이동합니다. 12.02.06 43 0
301846 퇴갤 실패 [3] 땡칠도사갤로그로 이동합니다. 12.02.06 43 0
301843 다들 잘 싸웠냐?? [33] 거칠게갤로그로 이동합니다. 12.02.06 151 0
301839 나님은 숙제하러 퇴겔이황 [1] 땡칠도사갤로그로 이동합니다. 12.02.06 35 0
301836 내 글 왜 지워짐?? iljeomobolt갤로그로 이동합니다. 12.02.06 43 0
301831 해외 프록시 좀 빠르고 좋고 믿을만한거 없냐? [4] iljeomobolt갤로그로 이동합니다. 12.02.06 57 0
301828 들보횽..나 뭔가 실수한거 같음. [6] 캐들보닭(115.92) 12.02.06 72 0
301822 귀여워 ㅋㅋ [2] 캐18닭(115.92) 12.02.06 41 0
301818 안드로이드/파일이 존재하는데 찾을수 없다고 나옵니다 12■1갤로그로 이동합니다. 12.02.06 75 0
301814 들보를 위한 18...의 과거 히스토리.jpg [4] 캐들보닭(115.92) 12.02.06 86 0
301811 뭐냐 또 한차례 쌈박질 한거냐??? [7] 거칠게갤로그로 이동합니다. 12.02.06 91 0
301809 아아 숙제하기 싫다 땡칠도사갤로그로 이동합니다. 12.02.06 38 0
301807 비트java고급반 형들 나좀 도와줘요.......... [7] 비트고급반(61.75) 12.02.06 204 0
301806 나 글 짤리는거 누가 저격하는거네. AoCP 얘기 하는데 왜 짤려? [15] dlbo갤로그로 이동합니다. 12.02.06 143 0
301805 우와 요즘 쓸만한곳 조낸 많다 일단 나도 써야겠다 하악 거칠게갤로그로 이동합니다. 12.02.06 43 0
301804 도날드 크누쓰 AoCP 다 내기 전에 뒈질꺼 같지 않냐 [1] dlbo갤로그로 이동합니다. 12.02.06 33 0
301803 IT개발자 수명이 왜 짧다고들 하는거지? [26] 이문동쮸쮸바갤로그로 이동합니다. 12.02.06 314 0
301800 Unity 엔진으로 게임개발할 예정인데요. 컴퓨터 어느정도 견적이면 괜찮 [4] Unity(112.170) 12.02.06 115 0
301799 네트워크 전공하려면 어떤 학과 가야함? [2] Reki_갤로그로 이동합니다. 12.02.06 65 0
301798 디씨갤 파서 완성!! [12] 끼로갤로그로 이동합니다. 12.02.06 118 0
301796 림히.. 교보문고 웃기다는데 왜짤라? 짤은 그리고 다 옷 입고 있었다고? dlbo갤로그로 이동합니다. 12.02.06 57 0
301795 화이트해커는 천재들만 될수있는거냐? [10] 지망생(175.239) 12.02.06 209 0
301793 프로그래머라고 코딩질만 하다가 죽는게 아니지... [16] 이문동쮸쮸바갤로그로 이동합니다. 12.02.06 234 0
301792 나 입갤하니까 또 정전되는거 봐라 dlbo갤로그로 이동합니다. 12.02.06 43 0
301791 앙잉뿌잉 [14] 오우응?(175.114) 12.02.06 75 0
301790 어제 런링맨 봤냐?? [2] 거칠게갤로그로 이동합니다. 12.02.06 64 0
301789 컴활 1급 실기 은근히 빡세네 [1] dlbo갤로그로 이동합니다. 12.02.06 115 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2