标签: shared-memory

如何将default子句全局设置为none?

我知道我可以通过使用默认情况下告诉OpenMP不要在并行区域内共享变量

#pragma omp parallel default none
Run Code Online (Sandbox Code Playgroud)

但有没有办法在全球范围内设置?似乎全局默认是所有未声明为私有的东西都是共享的,至少在我的应用程序中,还有许多应该是私有的东西而不是应该共享的东西.

c++ openmp shared-memory

5
推荐指数
1
解决办法
6248
查看次数

并行流程的沟通:我有什么选择?

我试图更深入地研究R例程的并行化。

关于一堆“工人”过程的沟通,我有哪些选择?

  1. 各个工人之间的沟通?
  2. 工人与“ 主人 ”过程的沟通?

AFAIU,没有“ 共享环境/共享内存 ”之类的东西,主服务器以及所有工作进程都可以访问,对吗?

到目前为止,我想到的最好的主意是使通信基于将JSON文档读写到硬盘上。这可能是个坏主意;-)我选择.json.Rdata文件,因为JSON似乎经常用于软件间的通信,因此我认为应该使用该“标准”。

期待了解更好的选择!

仅供参考:我通常基于基本包并行和contrib包降雪的功能sfClusterApplyLB()进行并行化,主要依靠函数来完成工作

编辑

我应该说我在Windows上运行,但是非常感谢基于Linux的答案/提示!

parallel-processing r shared-memory snowfall

5
推荐指数
2
解决办法
848
查看次数

ABAP:共享内存对象同步

我想创建一个简单的Tic Tac Toe游戏,在SAP系统的用户之间进行游戏.

我有一个带有SIGNUP方法的CL_TTT_MANAGER类,可以为玩家分配游戏.我的类是一个支持共享内存的类,因为它的目的是可能被sap系统的所有用户访问.

注册过程使用非常简单的算法完成.

1:存在"WAITING_FOR_PLAYERS"标志,并设置为ABAP_FALSE.原来.2:当第一个玩家调用"SIGNUP"时,该标志设置为"ABAP_TRUE".3:当第二个玩家调用"SIGNUP"时,该标志设置为"ABAP_FALSE"并创建游戏实例.

我的SIGNUP方法的问题在于它依赖于状态,即它必须记住第一个玩家的名字,这是使用私有属性实现的.

对于任何处理过并发问题的人,你会发现数据竞争,即如果第二个玩家注册后,第三个玩家也注册,第一个玩家的名字可能被替换为第三.

如何在abap中同步这些东西?我有什么机制呢?我在文档中没有遇到过这样的事情(我已经研究了2个月).我是否必须自己实施,或者有什么可以帮助我吗?

sap abap synchronization shared-memory

5
推荐指数
1
解决办法
1821
查看次数

用于附加共享内存段的shmat

当我浏览手册页时shmat.它被描述为API的原始函数是将与其关联的内存段附加shmid到调用进程的地址空间.

我的问题如下.

  • 术语附件对我来说是通用的.我发现很难理解附着所指的基本活动是什么.
  • 通过映射一段内存意味着什么?

c linux ipc shared-memory

5
推荐指数
1
解决办法
5488
查看次数

如何在Java线程上使用共享内存?

我正在用Java实现一个多线程程序,每个程序thread都是一个type class Node extends Thread

所有这些类都会生成某些值,这些值将由其他类使用。

因为main很容易从生成的值中获取值threads,但是从threads自身内部获取值,我又该如何获取其他值threads

//Start the threads from a list of objects
for (int i = 0; i < lnode.size(); i++) { 
    lnode.get(i).start();
}
Run Code Online (Sandbox Code Playgroud)

谢谢

java multithreading class shared-memory multiprocessing

5
推荐指数
1
解决办法
8128
查看次数

Tizen Emulator没有在mac上运行

我在创建和启动Tizen Emulator时遇到问题.我收到以下错误"无法启动此VM.Shared内存不足."

在此输入图像描述

问候

memory mobile shared-memory tizen tizen-emulator

5
推荐指数
1
解决办法
2112
查看次数

shm_open和ftruncate竞争条件可能吗?

shm_open手册页:

新的共享内存对象最初的长度为零.可以使用ftruncate(2)设置对象的大小.[...] shm_open()函数本身不会创建指定大小的共享对象,因为这样做会复制现有函数,该函数设置文件描述符引用的对象的大小.

这不会使应用程序暴露于竞争条件吗?考虑以下伪代码:

int fd = shm_open("/foo", CREATE);
if ( fd is valid ) {
  // created shm object, so set its size
  ftruncate(fd, 128);
} else {
  fd = shm_open("/foo", GET_EXISTING);
}
void* mem = mmap(fd, 128);
Run Code Online (Sandbox Code Playgroud)

由于shm_openftruncate调用(一起)不是原子的,你可能有一个竞争条件,一个进程调用shm_open(CREATEcase),但是在调用之前ftruncate,另一个进程调用shm_open(GET_EXISTINGcase)并尝试mmap0大小的对象,甚至可能写入它.

我可以想到两种避免这种竞争条件的方法:

  1. 使用IPC互斥量/信号量使整个事物同步,或者......

  2. 如果它是安全的(按POSIX),请ftruncate同时调用CREATEGET_EXISTING案例.

哪种方法可以避免这种竞争条件?

c c++ linux mmap shared-memory

5
推荐指数
1
解决办法
2078
查看次数

带有WAL的ios7 sqlite数据库永远不会同步主数据库文件

我已经阅读了很多关于ios7 SQLite/Core Data堆栈中新的WAL默认设置的主题.

首先它看起来是个好主意......虽然我需要根据我的业务需求不时地向远程Web服务执行数据库副本.目前我只备份SQLITE文件,我无法将其他2个文件添加到我正在使用的webservice操作中.这意味着我的备份显然不是最新的,因此毫无意义.

其他人建议我应该使用journal_mode = DELETE(NSSQLitePragmasOption)禁用WAL,这对我来说是一个可接受的解决方法.不过,我对此并不满意.感觉就像我错过了相当不错的表现.

理想情况下,我希望能够告诉Core Data/SQLite将SHM/WAL同步到主数据文件,然后执行备份.有没有办法在不挖掘疯狂的私有或未记录的API的情况下这样做?

sqlite core-data shared-memory wal ios7

5
推荐指数
1
解决办法
1818
查看次数

尝试从两个不同的进程锁定共享内存时,为什么pthread_mutex_t会出现段错误?

我为pthread_mutex_t编写了一个超级简单的包装器,用于在两个进程之间使用:

//basic version just to test using it between two processes
struct MyLock
{
    public:
        MyLock() {
            pthread_mutexattr_init(&attr);
            pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
            pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);

            pthread_mutex_init(&lock, &attr);
        }

        ~MyLock() {
            pthread_mutex_destroy(&lock);
            pthread_mutexattr_destroy(&attr);
        }

        lock() {
            pthread_mutex_lock(&lock);
        }

        unlock() {
            pthread_mutex_unlock(&lock);
        }

    private:
        pthread_mutexattr_t attr;
        pthread_mutex_t lock;
};
Run Code Online (Sandbox Code Playgroud)

我能够看到这个锁在一个进程中的常规线程之间正常工作,但是当我运行进程A时,它在共享内存区域中执行以下操作:

void* mem; //some shared memory from shm_open
MyLock* myLock = new(mem) MyLock;
//loop sleeping random amounts and calling ->lock and ->unlock
Run Code Online (Sandbox Code Playgroud)

然后进程B打开共享内存对象(通过设置它与内存的相同区域的字符组合进行验证)并执行以下操作:

MyLock* myLock = reinterpret_cast<MyLock*>(mem);
//same loop for locking and unlocking as process A …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading pthreads shared-memory

5
推荐指数
1
解决办法
984
查看次数

如何在共享内存中测量boost进程间向量的大小?

我正在使用boost :: interprocess :: vector在进程之间共享一些字符串,我想确保不会溢出它所在的共享内存段.

如何找到向量在内存中占用的空间,以及特殊的段分配字符串将占用多少内存?

typedef boost::interprocess::managed_shared_memory::segment_manager SegmentManager;
typedef boost::interprocess::allocator<char, SegmentManager> CharAllocator;
typedef boost::interprocess::basic_string<char, std::char_traits<char>, CharAllocator> ShmString;
typedef boost::interprocess::allocator<ShmString, SegmentManager> StringAllocator;
typedef boost::interprocess::vector<ShmString, StringAllocator> ShmStringVector;

const size_t SEGMENT_SIZE = ...;

addToSharedVector(std::string localString){
    using namespace boost::interprocess;
    managed_shared_memory segment(open_only, kSharedMemorySegmentName);
    ShmStringVector *shmvector = segment.find<ShmStringVector>(kSharedMemoryVectorName).first;

    size_t currentVectorSizeInShm =  ?????(shmvector);            <--------  HALP!
    size_t sizeOfNewStringInSharedMemory =   ?????(localString);  <--------

    //shared mutex not shown for clarity

    if (currentVectorSizeInShm + sizeOfNewStringInSharedMemory < SEGMENT_SIZE)  {
        CharAllocator charAllocator(segment.get_segment_manager());
        ShmString shmString(charAllocator);
        shmFunctionName = localString.c_str();
        shmvector->push_back(shmString);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ boost shared-memory

5
推荐指数
1
解决办法
466
查看次数