简单内存锁

本文介绍了一种基于Java的内存锁工具实现,通过ConcurrentHashMap进行锁的存储和管理,提供了一种轻量级的并发控制方案。文章详细展示了LockUtil类的定义,包括其构造方法、实例获取、锁的获取、设置和释放等操作。
部署运行你感兴趣的模型镜像
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
 
/** 内存锁工具
 */
public class LockUtil {
 
    private static final ConcurrentMap<Object, Object> map = new ConcurrentHashMap<Object, Object>();
    private static final LockUtil instance = new LockUtil();
 
    /**
     * 默认构造器
     */
    private LockUtil() {
    }
 
    public static LockUtil getInstance() {
        return instance;
    }
 
    public  Object put(Object key, Object value) {
        return map.put(key, value);
    }
 
    public  Object remove(Object key) {
        return map.remove(key);
    }
 
    public  Object get(Object key) {
        return map.get(key);
    }
    
    /**
     * 获取存储内存锁的Map
     * @return ConcurrentMap 内存锁Map
     */
    public ConcurrentMap<Object, Object> getLockMap() {
        return map;
    }

}

 
/**使用
*/
        // 内存锁
        LockUtil lock = LockUtil.getInstance();
        try {
            if (lock.get(key) == null) {
                // 设置内存锁
                lock.put(key, value); 
}catch (Exception e) {
 
        }finally{
            lock.remove(key);
        } 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 概念 锁页内存(Page-locked Memory),也被称为固定内存或不可分页内存,是一种特殊的物理内存区域。在操作系统中,为了提高内存使用效率,通常会将内存页面在物理内存和磁盘交换空间之间进行交换。而锁页内存被标记为不可交换到磁盘,始终保留在物理内存中,其物理地址在使用期间不会发生改变。 ### 作用 - **提高数据传输效率**:在进行高速数据传输时,如与GPU、网络设备等进行数据交互,如果使用可分页内存,数据传输过程中可能会因为页面交换而导致延迟。锁页内存避免了这种情况,能够显著提高数据传输的速度和稳定性。例如在深度学习训练中,数据频繁地在CPU和GPU之间传输,使用锁页内存可以加快数据传输,提升训练效率。 - **确保实时性**:对于一些对实时性要求极高的应用程序,如实时控制系统、高频交易系统等,锁页内存可以保证关键数据始终在物理内存中可用,避免因页面交换产生的延迟,确保系统能够及时响应。 ### 使用方法 #### 在Linux系统中 可以使用`mlock()`和`mlockall()`函数来锁定内存页面。以下是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #define SIZE 1024 * 1024 int main() { // 分配内存 char *buf = (char *)malloc(SIZE); if (buf == NULL) { perror("malloc"); return 1; } // 锁定内存 if (mlock(buf, SIZE) == -1) { perror("mlock"); free(buf); return 1; } // 使用内存 for (int i = 0; i < SIZE; i++) { buf[i] = 'A'; } // 解锁内存 if (munlock(buf, SIZE) == -1) { perror("munlock"); } free(buf); return 0; } ``` #### 在Windows系统中 可以使用`VirtualLock()`函数来锁定内存页面,示例代码如下: ```c #include <windows.h> #include <stdio.h> #define SIZE 1024 * 1024 int main() { // 分配内存 LPVOID buf = VirtualAlloc(NULL, SIZE, MEM_COMMIT, PAGE_READWRITE); if (buf == NULL) { printf("VirtualAlloc failed (%d)\n", GetLastError()); return 1; } // 锁定内存 if (!VirtualLock(buf, SIZE)) { printf("VirtualLock failed (%d)\n", GetLastError()); VirtualFree(buf, 0, MEM_RELEASE); return 1; } // 使用内存 for (int i = 0; i < SIZE; i++) { ((char *)buf)[i] = 'A'; } // 解锁内存 if (!VirtualUnlock(buf, SIZE)) { printf("VirtualUnlock failed (%d)\n", GetLastError()); } VirtualFree(buf, 0, MEM_RELEASE); return 0; } ``` ### 相关技术介绍 - **内存映射**:锁页内存通常与内存映射技术结合使用。通过内存映射,可以将文件或设备的物理地址直接映射到进程的虚拟地址空间中,实现数据的高效访问。例如,在Linux系统中可以使用`mmap()`函数进行内存映射,同时结合`mlock()`函数将映射的内存页面锁定。 - **内存池**:为了更高效地管理锁页内存,可以使用内存池技术。内存池预先分配一定数量的锁页内存块,当需要使用时直接从内存池中获取,使用完毕后归还到内存池,避免了频繁的内存分配和释放操作,提高了内存使用效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值