[해결했습니다!]인라인 어셈블리를 처음 접하면서 lock의 의미가 이해가 안되는데 도움을 요청합니다..

pby2017의 이미지

인라인 어셈블리를 접한지 7시간이 되어가는 상황입니다.

두 개 이상의 스레드를 만들어서 inc 명령어처럼 1씩 증가하여

예상하는 결과가 나오도록 lock을 사용하려는 상황입니다.

처음이라 부족하지만 '인라인 어셈블리', 'lock' 과 관련된 검색어들은 다 찾아보며

작성해봤지만 예상했던 결과 값이 나오지 않아서 절망적입니다.

뇌의 생각하는 기능도 마비가 되어버린 것 같습니다.

제 소스코드 입니다. (lock함수와 unlock함수입니다.)

#define LOCK_PREFIX "lock \n\t"
int lock = 0; // 1일 때 lock 상태라고 하겠습니다.
void lock(int *lock)
{
   int new = 1;
   asm volatile(
      "rep: \n\t" // jz rep이 되다가 몇 번 수정을 거치니 무시되어 lock이 종료됩니다.
      LOCK_PREFIX
      "cmpxchgl %1,%0 \n\t"
      "jz rep \n\t"
      : "+m"(*lock)
      : "ir"(new)
      : /* no */
      );
}

void unlock(int *lock)
{
   asm volatile(
      LOCK_PREFIX
      "decl %0 \n\t"
      : "+m"(*lock)
      : /* no */
      : /* no */
      );
}

이 함수를
1. lock
2. 값증가
3. unlock
순서로 사용하고 싶은데 예상되는 값이 나오지 않아서 고민 끝에 더 이상 자료를 보고 이해할 수가 없어서
질문하게 되었습니다. 제가 부족하지만 질문에 답변해주시면 정말정말 감사드리겠습니다.

pby2017의 이미지

lock 함수에서
1. LOCK_PREFIX : 삭제했습니다. (xchgl에 lock이 포함되어 있다고 이해했습니다.)
2. cmpxchgl : xchgl 으로 수정했습니다.
3. jz rep : cmp $1,%1; je rep; 으로 수정했습니다.
4. output에 "=ir"(new) 를 추가했습니다.