• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ pthread_spin_unlock函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中pthread_spin_unlock函数的典型用法代码示例。如果您正苦于以下问题:C++ pthread_spin_unlock函数的具体用法?C++ pthread_spin_unlock怎么用?C++ pthread_spin_unlock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了pthread_spin_unlock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: psivhmem_free_frame

int psivhmem_free_frame(ivshmem_pci_dev_t *dev, char * frame_ptr)
{
/*
 * first implementation: just clear corresponding bit in bitmap -> frame is available again
 *
 */
    unsigned long long n;
    unsigned long long index;

    if(!psivshmem_ptr_in_dev(dev, frame_ptr)) return -1;

    index = (frame_ptr - dev->ivshmem_base) / dev->frame_size;

    pthread_spin_lock(dev->spinlock);

	CLR_BIT(dev->bitmap,index);

    pthread_spin_unlock(dev->spinlock);

    return 0;
}
开发者ID:RWTH-OS,项目名称:pscom,代码行数:21,代码来源:psivshmem.c


示例2: pull_buf

void* pull_buf(struct pipe* p, int id, const void** buf, int* seq)
{
	struct pipe_elem* elem = NULL;

	// lock
	pthread_spin_lock(&p->lock);

	if (id < 0 || id >= p->n_dst)
		goto unlock;

	if (!dequeue(&p->dst[id], (void**)&elem)) {
		*buf = elem->buf;
		*seq = elem->seq;
	}

	// unlock
unlock : 
	pthread_spin_unlock(&p->lock);

	return elem;
}
开发者ID:allskyee,项目名称:v4l2_camera_xdisplay,代码行数:21,代码来源:pipe.c


示例3: test_spin3

int
test_spin3(void)
#endif
{
  pthread_t t;

  wasHere = 0;
  assert(pthread_spin_init(&spin, PTHREAD_PROCESS_PRIVATE) == 0);
  assert(pthread_spin_lock(&spin) == 0);
  assert(pthread_create(&t, NULL, unlocker, (void *) 0) == 0);
  assert(pthread_join(t, NULL) == 0);
  /*
   * Our spinlocks don't record the owner thread so any thread can unlock the spinlock,
   * but nor is it an error for any thread to unlock a spinlock that is not locked.
   */
  assert(pthread_spin_unlock(&spin) == 0);
  assert(pthread_spin_destroy(&spin) == 0);
  assert(wasHere == 2);

  return 0;
}
开发者ID:Avic,项目名称:pthread-win32,代码行数:21,代码来源:spin3.c


示例4: pthread_create

int pthread_create(pthread_t* thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void* arg) {
        event_t e;

        pthread_spin_lock(&lock);
       
        VERBOSE("[INTERCEPT] --> pthread_create\n");
       
        /* lock */
        e.owner = hashid.processes[id(pthread_self())];
        e.type = PTHREAD_CREATE;
        fire(&global_table, e);
       
        int ret = _BIANCApthread_create(thread, attr, start_routine, arg);
       
        e.son = id(*thread);
        post_fire(&global_table, e);
        hashid.processes[e.son] = find_process_id(&global_table, e.son);

        pthread_spin_unlock(&lock);
        return ret;
}
开发者ID:SavithaSwaroop,项目名称:Evinrude-CAMI-PNML,代码行数:21,代码来源:spin_capsule.c


示例5: global_cron

//global cron
//delete and close useless tcp fd
int
global_cron(struct server *s)
{
    int fd = -1;
    struct list_node *nds, *tmp;
    struct list *el = &s->eventlist;
    pthread_spin_lock(&el->lock);
    nds = el->head;
    el->head = NULL;
    pthread_spin_unlock(&el->lock);
    while (nds != NULL) {
        fd = *(int *) nds->data;
        if (fd > 0)
            close(fd);
        tmp = nds->next;
        free(nds->data);
        free(nds);
        nds = tmp;
    }
    return 0;
}
开发者ID:cofyc,项目名称:dnspod-sr,代码行数:23,代码来源:author.c


示例6: test_spin2

int
test_spin2(void)
#endif
{
  pthread_t t;

  assert(pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE) == 0);

  assert(pthread_spin_lock(&lock) == 0);

  assert(pthread_create(&t, NULL, func, NULL) == 0);
  assert(pthread_join(t, NULL) == 0);

  assert(pthread_spin_unlock(&lock) == 0);

  assert(pthread_spin_destroy(&lock) == 0);

  assert(washere == 1);

  return 0;
}
开发者ID:DMDZYP,项目名称:pthread-win32,代码行数:21,代码来源:spin2.c


示例7: usdf_pep_grow_backlog

static int
usdf_pep_grow_backlog(struct usdf_pep *pep)
{
    struct usdf_connreq *crp;
    size_t extra;

    extra = sizeof(struct usdf_connreq_msg) + pep->pep_cr_max_data;

    while (pep->pep_cr_alloced < pep->pep_backlog) {
        crp = calloc(1, sizeof(*crp) + extra);
        if (crp == NULL) {
            return -FI_ENOMEM;
        }
        crp->handle.fclass = FI_CLASS_CONNREQ;
        pthread_spin_lock(&pep->pep_cr_lock);
        TAILQ_INSERT_TAIL(&pep->pep_cr_free, crp, cr_link);
        ++pep->pep_cr_alloced;
        pthread_spin_unlock(&pep->pep_cr_lock);
    }
    return 0;
}
开发者ID:chuckfossen,项目名称:libfabric-cray,代码行数:21,代码来源:usdf_pep.c


示例8: ddlog_ext_register_built_in_events

int ddlog_ext_register_built_in_events(void){
    int spin_res = 0;
    int ret = DDLOG_RET_ERR;

    spin_res = pthread_spin_lock(&ddlog_ext_events.lock);
    if (spin_res == 0){
        ddlog_ext_events.events[ddlog_ext_events.index].event_type = DDLOG_EXT_EVENT_TYPE_BT;
        ddlog_ext_events.events[ddlog_ext_events.index].print_callback = ddlog_ext_display_bt;
        ddlog_ext_events.index++;

        ddlog_ext_events.events[ddlog_ext_events.index].event_type = DDLOG_EXT_EVENT_TYPE_HEXDUMP;
        ddlog_ext_events.events[ddlog_ext_events.index].print_callback = ddlog_ext_display_hex_dump;
        ddlog_ext_events.index++;

        spin_res = pthread_spin_unlock(&ddlog_ext_events.lock);
        if (spin_res == 0){
            ret = DDLOG_RET_OK;
        }
    }
    return ret;
}
开发者ID:jozsef-galajda,项目名称:ddlog,代码行数:21,代码来源:ddlog_ext.c


示例9: iohelp_handle_io_release_conch

/* Called by an I/O server upon receipt of an io_release_conch message;
   The user identified by USER is done with conch C; release it and 
   allow a waiting user to obtain the conch.  */
void
iohelp_handle_io_release_conch (struct conch *c, void *user)
{
  struct shared_io *user_sh = c->holder_shared_page;

  pthread_spin_lock (&user_sh->lock);
  if (c->holder_shared_page->conch_status != USER_HAS_NOT_CONCH)
    {
      c->holder_shared_page->conch_status = USER_HAS_NOT_CONCH;
      iohelp_fetch_shared_data (c->holder);
    }
  pthread_spin_unlock (&user_sh->lock);

  if (c->holder == user)
    {
      c->holder = 0;
      c->holder_shared_page = 0;
    }

  pthread_cond_broadcast (&c->wait);
}
开发者ID:GNUHurdTR,项目名称:hurd,代码行数:24,代码来源:handle_io_release_conch.c


示例10: sstack_sfsd_add

inline int
sstack_sfsd_add(uint32_t weight, sstack_sfsd_pool_t *pools,
				sfsd_t *sfsd)
{
	sstack_sfsd_pool_t *temp = NULL;
	int i = 0;
	int index = -1;


	// Parameter validation
	if (weight < MAXIMUM_WEIGHT || weight > MINIMUM_WEIGHT ||
				NULL == pools || NULL == sfsd) {
		sfs_log(sfs_ctx, SFS_ERR, "%s: Invalid parametes specified \n",
						__FUNCTION__);

		errno = EINVAL;
		return -1;
	}

	// Get index of sfsd pool that covers the specified storeg weight
	for (i = 0; i < MAX_SFSD_POOLS; i++) {
		uint32_t low = *(uint32_t *) &weights[i][0];
		uint32_t high = *(uint32_t *) &weights[i][1];
		if (weight >= low && weight <= high)
			break;
	}
	index = i;
	temp = pools;

	for (i = 0; i < index; i++)
		temp ++;

	// Now temp points to the right pool
	pthread_spin_lock(&temp->lock);
	bds_list_add_tail((bds_list_head_t) &sfsd->list,
								(bds_list_head_t) &temp->list);
	pthread_spin_unlock(&temp->lock);

	return 0;
}
开发者ID:shubhros,项目名称:SeamlessStack,代码行数:40,代码来源:sfs_helper.c


示例11: pthread_setcancelstate

// funzione realtiva allo spinlock
void *do_something(long int who_i_am) {
    int i;
    int dummy;

    // imposta la cancellazione asincrona
    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,&dummy);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,&dummy);

    // aspetta che pure l'altro thread l'abbia fatto
    pthread_barrier_wait(&pbarrier);
    // sblocca il segnale SIGUSR1
    pthread_sigmask(SIG_UNBLOCK,&block_sig,NULL);

    while (1) {
        // selezione un intervallo casuale di tempo
        i=rand()%9+1;
        // avvisa
        printf("Thread %ld: going to sleep for %d sec...\n",who_i_am,i);
        // e dormi
        sleep(i);
        // prova ad acquisire lo spinlock
        if (pthread_spin_trylock(&spinlock)) {
            // in caso contrario avvisa
            printf("Thread %ld: wait for the spinlock...\n",who_i_am);
            // e attendi
            pthread_spin_lock(&spinlock);
        }
        // da qui ho acquisito lo spinlock
        // seleziona un intervallo casuale di tempo
        i=rand()%9+1;
        // avvisa
        printf("Thread %ld: spinlock obtained and now wait for %d sec...\n",who_i_am,i);
        // e dormi
        sleep(i);
        printf("Thread %ld: unlock spinlock...\n",who_i_am);
        // rilascia lo spinlock
        pthread_spin_unlock(&spinlock);
    }
    return NULL;
}
开发者ID:DesiD,项目名称:CsInfoPa,代码行数:41,代码来源:spinlock_cancel.c


示例12: usdf_msg_recv

ssize_t
usdf_msg_recv(struct fid_ep *fep, void *buf, size_t len,
		void *desc, fi_addr_t src_addr, void *context)
{
	struct usdf_ep *ep;
	struct usdf_rx *rx;
	struct usdf_msg_qe *rqe;
	struct usdf_domain *udp;

	ep = ep_ftou(fep);
	rx = ep->ep_rx;
	udp = ep->ep_domain;

	if (TAILQ_EMPTY(&rx->r.msg.rx_free_rqe)) {
		return -FI_EAGAIN;
	}

	pthread_spin_lock(&udp->dom_progress_lock);

	rqe = TAILQ_FIRST(&rx->r.msg.rx_free_rqe);
	TAILQ_REMOVE(&rx->r.msg.rx_free_rqe, rqe, ms_link);
	--rx->r.msg.rx_num_free_rqe;

	rqe->ms_context = context;
	rqe->ms_iov[0].iov_base = buf;
	rqe->ms_iov[0].iov_len = len;
	rqe->ms_last_iov = 0;

	rqe->ms_cur_iov = 0;
	rqe->ms_cur_ptr = buf;
	rqe->ms_iov_resid = len;
	rqe->ms_length = 0;
	rqe->ms_resid = len;

	TAILQ_INSERT_TAIL(&rx->r.msg.rx_posted_rqe, rqe, ms_link);

	pthread_spin_unlock(&udp->dom_progress_lock);

	return 0;
}
开发者ID:patrickmacarthur,项目名称:libfabric,代码行数:40,代码来源:usdf_msg.c


示例13: pthread_setspecific

/**
	@brief This function set value to thread_specific data by the key.
*/
int pthread_setspecific (pthread_key_t key, const void *value)
{
    hurd_ihash_t speci_tb = (hurd_ihash_t)get_current_pt_specific();

    /* key is valid ? */
    if (key > __pthread_key_nums ||
            __destructort_arry[key] == DESTRUCTORT_INVALID)
        return -EINVAL;

    /* has created? */
    if (!speci_tb)
    {
        int ret;

        /* if failt, it must out of memory */
        if (hurd_ihash_create(&speci_tb, HURD_IHASH_NO_LOCP) != 0)
            return -ENOMEM;

        /* add speci_tb to speci_tables */
        pthread_spin_lock(&__pthread_specific_lock);
        ret = find_elem_index_and_add_to_arry(speci_tb, &__pthread_specific_arry, (int *)&__pthread_specific_nums, NULL);
        pthread_spin_unlock(&__pthread_specific_lock);

        /* errno is always no mem */
        if (ret < 0)
        {
            hurd_ihash_destroy(speci_tb);
            return -ENOMEM;
        }

        /* set to pthread */
        set_current_pt_specific((void *)speci_tb);
    }

    /* add to ihash tables */
    if (hurd_ihash_add(speci_tb, (hurd_ihash_key_t)key, (hurd_ihash_value_t)value) != 0)
        return -ENOMEM;

    return 0;
}
开发者ID:LastRitter,项目名称:GridOS,代码行数:43,代码来源:pthread_specific.c


示例14: calqueue_put

void calqueue_put(double timestamp, void *payload) {

	calqueue_node *new_node;

	//printf("calqueue: inserendo %f, cwidth %f, bukettop %f, nbuckets %d, lastprio %f\n", timestamp, cwidth, buckettop, nbuckets, lastprio);

	// Fill the node entry
	new_node = malloc(sizeof(calqueue_node));
	new_node->timestamp = timestamp;
	new_node->payload = payload;
	new_node->next = NULL;

	if(new_node == NULL){
		printf("Out of memory in %s:%d\n", __FILE__, __LINE__);
		abort();
	}

	pthread_spin_lock(&cal_spinlock);
	calqueue_enq(new_node);
	pthread_spin_unlock(&cal_spinlock);

}
开发者ID:HPDCS,项目名称:NPBQ,代码行数:22,代码来源:calqueue.c


示例15: threadFunc

static void *                   /* Loop 'arg' times incrementing 'glob' */
threadFunc(void *arg)
{
    int loops = *((int *) arg);
    int loc, j, s;

    for (j = 0; j < loops; j++) {
        s = pthread_spin_lock(&splock);
        if (s != 0)
            errExitEN(s, "pthread_spin_lock");

        loc = glob;
        loc++;
        glob = loc;

        s = pthread_spin_unlock(&splock);
        if (s != 0)
            errExitEN(s, "pthread_spin_unlock");
    }

    return NULL;
}
开发者ID:duxing2007,项目名称:books-examples,代码行数:22,代码来源:thread_incr_spinlock.c


示例16: script_terminate

MTC_STATIC  MTC_STATUS
script_terminate(void)
{
    MTC_U32 i;

    pthread_spin_lock(&lock);
    terminate = TRUE;
    for (i = 0 ; i < SCRIPT_SOCKET_NUM; i++) 
    {
        if (sc_listening_socket[i] > 0) 
        {
#if 0
            //  let exit system call handle this to give
            //  an accurate intication of daemon termination
            //  to calldaemon (command)

            close(sc_listening_socket[i]);
#endif
            sc_listening_socket[i] = -1;
        }
    }
    pthread_spin_unlock(&lock);

#if 0
    {
        int pthread_ret;
        // wait for thread termination;

        for (i = 0 ; i < SCRIPT_SOCKET_NUM; i++) 
        {
            if ((pthread_ret = pthread_join(sc_thread[i], NULL)) != 0) 
            {
                pthread_ret = pthread_kill(sc_thread[i], SIGKILL);
            }
        }
    }
#endif
    return MTC_SUCCESS;
}
开发者ID:djs55,项目名称:xha,代码行数:39,代码来源:sc_sv.c


示例17: my_free_hook

static void
my_free_hook (void *ptr, const void *caller)
{
    pthread_spin_lock(&lock);
    /* Restore all old hooks */
    __malloc_hook = old_malloc_hook;
    __realloc_hook = old_realloc_hook;
    __free_hook = old_free_hook;
    /* Call recursively */
    free (ptr);
    /* Save underlying hooks */
    old_malloc_hook = __malloc_hook;
    old_realloc_hook = __realloc_hook;
    old_free_hook = __free_hook;
    /* printf might call free, so protect it too. */
    printf ("freed pointer %p\n", ptr);
    /* Restore our own hooks */
    __malloc_hook = my_malloc_hook;
    __realloc_hook = my_realloc_hook;
    __free_hook = my_free_hook;
    pthread_spin_unlock(&lock);
}
开发者ID:lukasz-rzepka,项目名称:memtool,代码行数:22,代码来源:memtool.c


示例18: delete_close_event

//for tcp
//add to list, sentinel will delete this in the main event loop
int
delete_close_event(int fd, struct fetcher *f)
{
    struct list *el = NULL;
    struct list_node *nd = NULL;
    el = f->el;
    if (el == NULL)
        return -1;
    if ((nd = malloc(sizeof(struct list_node))) == NULL)
        return -1;
    nd->data = malloc(sizeof(int));
    if (nd->data == NULL) {
        free(nd);
        return -1;
    }
    memcpy(nd->data, &fd, sizeof(int));
    pthread_spin_lock(&el->lock);
    nd->next = el->head;
    el->head = nd;
    pthread_spin_unlock(&el->lock);
    return 0;
}
开发者ID:cofyc,项目名称:dnspod-sr,代码行数:24,代码来源:author.c


示例19: usdf_eq_write

static ssize_t
usdf_eq_write(struct fid_eq *feq, uint32_t event, const void *buf,
		size_t len, uint64_t flags)
{
	struct usdf_eq *eq;
	int ret;

	eq = eq_ftou(feq);

	pthread_spin_lock(&eq->eq_lock);

	/* EQ full? */
	if (atomic_get(&eq->eq_num_events) == eq->eq_ev_ring_size) {
		ret = -FI_EAGAIN;
		goto done;
	}

	ret = usdf_eq_write_event(eq, event, buf, len, flags);
done:
	pthread_spin_unlock(&eq->eq_lock);
	return ret;
}
开发者ID:brminich,项目名称:ompi-mirror,代码行数:22,代码来源:usdf_eq.c


示例20: flush_buf

void flush_buf(struct pipe* p, int id)
{
	struct pipe_elem* elem;

	// lock
	pthread_spin_lock(&p->lock);

	if (id < 0 || id >= p->n_dst)
		goto unlock;

	while (!dequeue(&p->dst[id], (void**)&elem)) {
		elem->ref_cnt--;
		if (elem->ref_cnt <= 0) {
			assert(elem->ref_cnt >= 0);
			assert(!enqueue(&p->src, elem));
		}
	}

unlock : 
	// unlock
	pthread_spin_unlock(&p->lock);
}
开发者ID:allskyee,项目名称:v4l2_camera_xdisplay,代码行数:22,代码来源:pipe.c



注:本文中的pthread_spin_unlock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ pthread_yield函数代码示例发布时间:2022-05-30
下一篇:
C++ pthread_spin_lock函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap