| | |
| | | |
| | | system v shm lock-free queue |
| | | |
| | | 多读多写,多协程,多shmkey均测试通过 |
| | | shmwrap.go systemV 共享内存库的封装 |
| | | shmqueue.go 共享内存无锁队列库,多读多写,多协程,多shmkey均测试通过 |
| | | shmData.go 共享内存[]byte的库, shmid对应的共享内存只attach,不create |
| | | |
| | | |
| | |
| | | return shm.Rm(id) |
| | | } |
| | | } |
| | | |
| | | func ShmAttachNum(shmId int) (int,error) { |
| | | var idDs shm.IdDs |
| | | |
| | | _, err := shm.Ctl(shmId, shm.IPC_STAT, &idDs) |
| | | if err != nil { |
| | | return 0, err |
| | | } |
| | | |
| | | return int(idDs.Nattch), nil |
| | | } |
| | | |
| | | func ForceRemoveShm(data []byte, shmId int) error { |
| | | count, err := ShmAttachNum(shmId) |
| | | if err != nil{ |
| | | return err |
| | | }else{ |
| | | for i:=0; i < count; i++{ |
| | | Detach(data) |
| | | } |
| | | } |
| | | RemoveShmID(shmId) |
| | | return nil |
| | | } |