Browse Source

ft: 完善代码

master
SisMaker 1 year ago
parent
commit
9b1cec94ee
2 changed files with 2 additions and 4 deletions
  1. +2
    -4
      c_src/eNifLock/eNifLock.cc
  2. BIN
      priv/eNifLock.so

+ 2
- 4
c_src/eNifLock/eNifLock.cc View File

@ -64,13 +64,11 @@ ERL_NIF_TERM tryLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){
if(lockOne(env, &ThePid, KeyIx, Val)){ if(lockOne(env, &ThePid, KeyIx, Val)){
cnt++; cnt++;
}else{ }else{
uint64_t RExpected;
allList = argv[0]; allList = argv[0];
for(int i = 0; i <= cnt; i++){ for(int i = 0; i <= cnt; i++){
enif_get_list_cell(env, allList, &head, &allList); enif_get_list_cell(env, allList, &head, &allList);
enif_get_int(env, head, &KeyIx); enif_get_int(env, head, &KeyIx);
RExpected = Val;
LockSlot[KeyIx].compare_exchange_strong(RExpected, 0);
LockSlot[KeyIx].store(0);
} }
return atomFalse; return atomFalse;
} }
@ -114,7 +112,7 @@ ERL_NIF_TERM releaseLocks(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){
ERL_NIF_TERM getLockPid(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){ ERL_NIF_TERM getLockPid(ErlNifEnv *env, int, const ERL_NIF_TERM argv[]){
int KeyIx; int KeyIx;
KeyIx = enif_hash(ERL_NIF_INTERNAL_HASH, argv[0], HashSalt) % LockSize;
enif_get_int(env, argv[0], &KeyIx);
ErlNifPid ThePid; ErlNifPid ThePid;
uint64_t Var = LockSlot[KeyIx].load(); uint64_t Var = LockSlot[KeyIx].load();

BIN
priv/eNifLock.so View File


Loading…
Cancel
Save