SpinLock 에 사용되는 특의 함수, atomic 키워드와 compare_exchange_strong() 메소드를 쓰면서 구현을 하는 과정에 대해서 들었는데, 의문점이 void Add(), Sud() 메소드에 순서상의 lock_guard() 를 먼저 실행하면 되지 않을까 생각합니다. thread1, thread2 두 개의 쓰레드가 하나의 locked 부울 데이터를 공유한 상태에서 동시에 lock _guard() 를 할 수 있는 경우에서 locked 부울을 동시 접근하는 경우도 있겟지만, => 이러면 deadlock 이 발생하겠죠. 같은 말로, thread t1(Add); thread t2(Add); 같은 경우도 위에 deadlock 발생하는 같은 이치라고 보시면 될꺼 같습니다. 결국에는 locked 부울 데이터를 공통적으로 사용한다는 부분에서 생기는 문제니까요. 즉, thread 1 또는 thread 2 가 동시적으로 접근하지 않는 이상 deadlock 은 발생하지는 않을 것이며, add 메소드에서 lock _guard() 를 했기에, 모든 작업을 다 끝내고 그 다음 add() 메소드를 실행하지 않을까 하고 생각합니다. 하지만 main 에서 Add(), Sub() 를 순차적으로 실행했기에 Add() 에 먼저 thread1, thread2 가 동시에 수행을 한다해도 결국에는 Add() 메소드에서 lock_guard 를 둘 중 하나가 먼저 수행하기 때문에 Add() 메소드를 먼저 접하는 thread 가 수행을 하고, 그 뒤의 Sub() 메소드 또한 실행을 하지만, 이 또한 thread 1 또는 thread 2 둘 중 하나가 lock_guard() 를 하고 있는 상태이기 때문에 다른 스레드가 _locked 부울에 접근을 하지 못하는 이유로 deadlock 이 발생하지 않고 원하는 값이 출력되지 않을까 생각했고, 실제로도 0 값이 나오기는 했습니다. 좀 더 정확하게는, 멀티스레드가 순차적으로 수행하지 않고 동시 다발적으로 실행이 된다면 종류는 아마, 1. A thread Add() 실행 B thread Sub() 실행 2. B thread Sub() 실행 A thread Add() 실행 3. A, B thread Add(), Sub() 동시 실행 같은 경우의 수가 더 있을 수도 있지만 현재는 여기 까지 밖에 볼 수 없었습니다. 만약 main() 함수에서 3번 경우에서 두 메소드에서 동시 다발적으로 처리를 수행한다면 deadlock 이 테스트를 하면서 운이 좋게 안 뜬걸로 볼 수있지만, 순차적으로 Add() -> Sub() 식이라면, 즉 1번 경우라면 SpinLock 을 처음 방식처럼 구현하는 상태에서, lock_guard() 메소드를 순서를 바꿔서 처리하는 방법도 옳은 방법으로도 되는지 알고 싶습니다. int32 sum; class SpinLock { public: void lock(){ while (_locked){ } _locked = true; } void unlock() { _locked = false; } private: bool _locked = false; }; void Add() { lock_guard<SpinLock> guard(spinLock); for (int32 i = 0; i < 10'000; ++i) { sum++; } } void Sub() { lock_guard<SpinLock> guard(spinLock); for (int32 i = 0; i < 10'000; ++i) { sum--; } } void main() { thread t1(Add); thread t2(Sub); t1.join(); t2.join(); cout << sum << endl; } .. 생략
안녕하세요 강사님. 질문이 있어서 남기게 되었습니다. 첫 번째 질문: 네이버 view탭 검색 결과 크롤링 2를 완료한 이후 아래 코드 실행 후 손흥민을 검색했는데 검색결과가 30개가 아닌 7개가 출력되었습니다. 이러한 이슈 때문인지 네이버 view탭 검색 결과 크롤링 3 강의가 정상적으로 진행되지 않습니다. import requests from bs4 import BeautifulSoup # beautiful soup 라이브러리 import base_url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=" keyword = input("검색어를 입력하세요 : ") url = base_url + keyword print(url) headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" } # dictionary req = requests.get(url, headers = headers) # GET 방식으로 naver에 요청 html = req.text # 요청을 하여 html을 받아옴 soup = BeautifulSoup(html, "html.parser") # html을 html.parser로 분석(클래스를 통한 객체 생성) total_area = soup.select(".total_area") timeline_area = soup.select(".timeline_area") if total_area: areas = total_area elif timeline_area: areas = timeline_area else: print("class 확인 요망") for area in areas: title = area.select_one(".api_txt_lines.total_tit") name = area.select_one(".sub_txt.sub_name") print(name.text) print(title.text) print(title["href"]) print() print(len(areas)) 두 번째 질문: 네이버 view탭 검색 결과 크롤링 3을 진행하면서 아래 코드처럼 작성하고 손흥민을 검색했을 때 NoneType 오류가 발생합니다. 첫 번째 질문의 이슈로 인해 그런 것인가요? .total_wrap.api_ani_send 클래스가 브라우저 상에서는 30개가 잘 나오는데 제대로 안 받아와진 것 같은 느낌이 듭니다. 도와주시면 감사하겠습니다 ㅠㅠ Traceback (most recent call last): File "C:\python_web_crawling\01_4_naver.py", line 30, in <module> print(title.text) ^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'text' 아래는 코드입니다. import requests from bs4 import BeautifulSoup # beautiful soup 라이브러리 import base_url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=" keyword = input("검색어를 입력하세요 : ") url = base_url + keyword print(url) headers = { "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" } # dictionary req = requests.get(url, headers = headers) # GET 방식으로 naver에 요청 html = req.text # 요청을 하여 html을 받아옴 soup = BeautifulSoup(html, "html.parser") # html을 html.parser로 분석(클래스를 통한 객체 생성) items = soup.select(".total_wrap.api_ani_send") for area in items: # ad = area.select_one(".link_ad") # if ad: # print("광고입니다.") # continue title = area.select_one(".api_txt_lines.total_tit") name = area.select_one(".sub_txt.sub_name") print(title.text) print(name.text) # print(title["href"]) print() #print(len(items))
처음에는 MEMBER_SEQ를 영속성 컨텍스트의 어딘가... 에 저장할거 라고 생각했는데 영속성 컨텍스트는 트랜잭션이 커밋될때 같이 종료되기 때문에, 그렇진 않을 것 같다는 생각이 들었습니다. 이러한 방식이면 트랜잭션마다 AllocationSize만큼의 빈 공간이 생기는 사태가 발생하니까요 그냥 JPA 내부 Entity의 정보를 저장하는 어딘가에 MEMBER_SEQ도 저장되고, 'call next value for MEMBER_SEQ' 를 호출할 때 마다 같이 수정된다고 보면 되나요?
강사님, 안녕하세요 EBS 다중 연결을 강의에선 하나의 EC2 인스턴스에 여러 개의 볼륨과 연결하는 기능으로 설명하셨는데 자료 상에선 하나의 EBS 볼륨을 여러 EC2에 동시에 연결하는 기능이라고 돼 있습니다. 이 두 가지를 모두 EBS 다중 연결이라고 표현하는지 궁금합니다. 감사합니다.
이중 포인터에는 포인터의 주소만 저장이 가능한 것으로 알고 있습니다. 그래서 동적 다차원 배열을 만들 때 이중 포인터를 정의하면 int** matrix = new int* [row]; 이렇게 정의가 가능합니다. 제가 이해가 안되는 부분은 바로 뒤에 나오는 반복문 입니다. for (int r = 0; r < row; ++r) { matrix[r] = new int[col]; } 여기서 matrix에 저장되는 것이 new int[col] 인데, 이는 포인터가 가지는 행렬의 주소로 생각 됩니다. matrix[0]은 matrix 라는 이중 포인터 안에 저장되있는 첫번째 포인터를 나타내어서 저렇게 작성되는 것인지 궁금합니다.
강의 소스 그대로 참고하여 현재 진행중인 프로젝트에 CustomUserDetailsService, CustomAuthenticaionProvider, SecurityConfigure 모두 작성하였습니다. 그런데 CustomAuthenticaionProvider의 UserDetailsService와 PasswordEncoder의 @Autowired 부분에서 빨간 줄이 그어져 진행이 불가능합니다. 혹시 스프링 부트 버전차이 때문에 그러는 걸까요?? 현재 2.7.1 사용중입니다. 실습한 코드 사진 첨부하도록 하겠습니다. configure context customUserDetailsService customAuthenticationProvider
안녕하세요. DOOD 방식으로 하고있는데, create-cicd-project-image-playbook.yml을 만들고, create-cicd-project-container-playbook.yml 작업을 해도 도커에서 pull을 받아오지 않고 기존에 있는 cicd-project-ansible과 같은 이미지를 생성하는 거 같습니다 ㅠㅠ 이거 왜 그러는 걸까요??
강의대로 했는데 안되네요. 우선 깃 링크로 접속하여 코드 다운로드받은뒤 압축풀어서 intellij 로 open 하여 해당 강의처럼 maven -> compile 더블클릭 했는데, 잘 돌던중 에러한줄이 뜹니다. /Users/jjeoV/Desktop/jjeoV/인프런/keesun/studyolle-master 2/target/classes/static/node_modules/.bin/jdenticon jdenticon 파일이 없는건가요? 그냥 딸랑 경로하나뜨니까 뭔지 잘 몰르겠네요. 감사합니다.
void appendModelName(String modelName) { this.modelName += modelName } 인데 어떻게 '까망이 + 까망이' 가 되는게 아니라 b1.appendModelName 에 있는 (최신형) 이 붙게 되는걸까요....? append가 인텔리제이에서 제공하는 어떤 함수 같은건가요???
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
================= 현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ) 강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등) 이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요) 개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등.. 글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.) 서로 예의를 지키며 존중하는 문화를 만들어가요. 질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! ) 먼저 유사한 질문이 있었는지 검색해보세요. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ================== 안녕하세요 맛비님, counter 설계 강의를 듣다가 문득 궁금한 점이 들어 질문 드립니다. 강의에서 ./build를 통해 돌려서 나온 Simulation은 gate들의 delay가 반영되지 않고 오직 기능만을 확인할 수 있는 Functional Simulation이라고 알고 있습니다. 그렇다면 제가 gate들의 delay가 반영된 Timing Simulation을 보고 싶으면 합성을 진행한 후에 post synthesis simulation을 누르면 되나요? FPGA보드가 없어도 제가 예를 들어 counter에 대한 verilog코드를 짜서 합성만 진행한다면 post synthesis simulation을 눌러서 counter내부의 gate들의 delay가 반영된 Timing Simulation을 확인할 수 있는지 궁금합니다!