Example #1
0
/**
    * Asynchronous version of #putAll(std::map<VarItem,VarItem> *data, int lifespan, int maxidle)
*/
int RemoteCache::putAllAsync(std::map<VarItem,VarItem> *data, int lifespan, int maxidle) {
#ifdef NOT_THREAD_SAFE
    return putAll(data, lifespan, maxidle);
#endif
    // mel by vracet i chyby, asi pocet neulozenych polozek
    int max_threads = transportFactory->get_key_owners_num();
    if(lifespan < 0) {
        lifespan = this->default_lifespan;
    }
    if(maxidle < 0) {
        maxidle = this->default_maxidle;
    }
    std::map<VarItem,VarItem>::iterator pos;
    int *rets = new int[data->size()];
    pthread_t *threads = new pthread_t[data->size()];
    thread_args *t_args = new thread_args[data->size()];
    int i =0;
    for (pos = (*data).begin(); pos != (*data).end(); ++pos) {

        t_args[i].RC = this;
        t_args[i].key = &pos->first;
        t_args[i].value = &pos->second;
        t_args[i].lifespan = lifespan;
        t_args[i].maxidle = maxidle;

        rets[i] = pthread_create( &threads[i], NULL, put_provider, (void*) &t_args[i]);

        i++;

        if(i>= max_threads) { // limit number of threads
            pthread_join( threads[i-max_threads], NULL);

        }

    }
    int start = data->size() - max_threads;
    if(start < 0) {
        start = 0;
    }

    for(int j = start; j<data->size(); j++) {
        pthread_join( threads[j], NULL);
        // std::cout<<"Thread "<<j<<" returns: "<<rets[j]<<std::endl;

    }
    delete [] rets;
    delete [] t_args;
    delete [] threads;


    // std::cout << "done"<<std::endl;
    return 0;
}
Example #2
0
 JHashMap::JHashMap(JMap* m):JAbstractMap(getClazz()){
     jint s=((m->size() / DEFAULT_LOAD_FACTOR) + 1 ?  (m->size() / DEFAULT_LOAD_FACTOR) + 1 : DEFAULT_INITIAL_CAPACITY);
     init(s,DEFAULT_LOAD_FACTOR);
     putAll(m);
 }