当前位置: 首页>>代码示例>>C++>>正文


C++ semaphore_create函数代码示例

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


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

示例1: minisocket_initialize

/* Initializes the minisocket layer. */
void minisocket_initialize()
{
  int i;
  sock_array = (minisocket_t*)malloc(sizeof(struct minisocket)*NUM_SOCKETS);
  if (!sock_array) {
    return;
  }
  for (i = 0; i < NUM_SOCKETS; i++) {
    sock_array[i] = NULL;
  }
  client_lock = semaphore_create();
  if (!client_lock) {
    free(sock_array);
    return;
  }
  server_lock = semaphore_create();
  if (!server_lock) {
    free(sock_array);
    semaphore_destroy(client_lock);
    return;
  }
  semaphore_initialize(client_lock, 1);
  semaphore_initialize(server_lock, 1);
  network_get_my_address(my_addr);
  curr_client_idx = CLIENT_START;
  //printf("minisocket_initialize complete\n");
}
开发者ID:kentalabur,项目名称:egs,代码行数:28,代码来源:minisocket.c

示例2: vfs_init

void vfs_init(void)
{
    int i;

    vfs_table.sem = semaphore_create(1);
    openfile_table.sem = semaphore_create(1);

    KERNEL_ASSERT(vfs_table.sem != NULL && openfile_table.sem != NULL);

    /* Clear table of mounted filesystems. */
    for(i=0; i<CONFIG_MAX_FILESYSTEMS; i++) {
        vfs_table.filesystems[i].filesystem = NULL;
    }

    /* Clear table of open files. */
    for (i = 0; i < CONFIG_MAX_OPEN_FILES; i++) {
        openfile_table.files[i].filesystem = NULL;
    }

    vfs_op_sem = semaphore_create(1);
    vfs_unmount_sem = semaphore_create(0);

    vfs_ops = 0;
    vfs_usable = 1;

    kprintf("VFS: Max filesystems: %d, Max open files: %d\n",
            CONFIG_MAX_FILESYSTEMS, CONFIG_MAX_OPEN_FILES);
}
开发者ID:Rotte,项目名称:osm-k,代码行数:28,代码来源:vfs.c

示例3: blockdevice_create

BLOCKDEVICEP 
blockdevice_create(char *name, int blocksize, int numblocks)
{
	BLOCKDEVICEP devp ;
	int rc ;

	if (blocksize != REAL_BLOCK_LENGTH) {
		/*
		** For now we simplify things and just force
		** all blockdevices to have 1k block sizes.
		** We can fix this assumption up later.
		*/
		return NULL ;
	}

	if (strlen(name) >= BLOCK_DEV_MAX_NAME_LEN) {
		return NULL ;
	}

	devp = malloc(sizeof(BLOCKDEVICE)) ;

	if (NULL == devp) {
		return NULL ;
	}

	devp->name = malloc(strlen(name)+1) ;

	if (NULL == devp->name) {
		free(devp) ;
		return NULL ;
	}

	devp->sem = semaphore_create(1234, 0) ;
	devp->dirtysem = semaphore_create(1235, 0) ;

	/*if (! devp->sem) {
		free(devp) ;
		return NULL ;
	}*/

	strcpy(devp->name, name) ;
	devp->blocksize = blocksize ;
	devp->numblocks = numblocks ;
	devp->lastblockchecked = 0 ;

	rc = shmem_open() ;

	if (0 == rc) {
		semaphore_destroy(devp->sem, 1) ;
		free(devp->name) ;
		free(devp) ;
		return NULL ;
	}

	devp->bd = (struct SHMEM_BLOCK_OVERLAY *) shmem_get_memptr() ;

	initialize_block_dev_shmem(devp->bd, blocksize, numblocks, name) ;

	return devp ;
}
开发者ID:DEMONkill,项目名称:Nautilus,代码行数:60,代码来源:blockdevice.c

示例4: miniroute_initialize

/* Performs any initialization of the miniroute layer, if required. */
void
miniroute_initialize()
{
    network_get_my_address(hostaddr);
    discovery_alarm = -1;

    intrpt_buffer = queue_new();
    intrpt_sig = semaphore_create();
    discovery_mutex = semaphore_create();
    discovery_sig = semaphore_create();

    route_cache = miniroute_cache_new(65536, SIZE_OF_ROUTE_CACHE, MINIROUTE_CACHED_ROUTE_EXPIRE);
    disc_cache = miniroute_cache_new(65536, SIZE_OF_ROUTE_CACHE, MINIROUTE_CACHED_ROUTE_EXPIRE * 10);

    if (NULL == intrpt_buffer || NULL == intrpt_sig || NULL == route_cache
            || NULL == discovery_mutex || NULL == discovery_sig) {
        queue_free(intrpt_buffer);
        semaphore_destroy(intrpt_sig);
        semaphore_destroy(discovery_mutex);
        semaphore_destroy(discovery_sig);
        miniroute_cache_destroy(route_cache);
        return;
    }

    semaphore_initialize(intrpt_sig, 0);
    semaphore_initialize(discovery_mutex, 1);
    semaphore_initialize(discovery_sig, 0);

    network_get_my_address(hostaddr);

    minithread_fork(miniroute_control, NULL);
}
开发者ID:DolphinWilly,项目名称:PortOSnix,代码行数:33,代码来源:miniroute.c

示例5: minithread_system_initialize

/*
 * Initialization.
 *
 *      minithread_system_initialize:
 *       This procedure should be called from your C main procedure
 *       to turn a single threaded UNIX process into a multithreaded
 *       program.
 *
 *       Initialize any private data structures.
 *       Create the idle thread.
 *       Fork the thread which should call mainproc(mainarg)
 *       Start scheduling.
 *
 */
void
minithread_system_initialize(proc_t mainproc, arg_t mainarg) {
  minithread_t clean_up_thread = NULL;
  int a = 0;
  void* dummy_ptr = NULL;
  minithread_t tmp = NULL;
  tmp = NULL;
  dummy_ptr = (void*)&a;
  current_id = 0; // the next thread id to be assigned
  id_lock = semaphore_create();
  semaphore_initialize(id_lock,1); 
  runnable_q = multilevel_queue_new(4);
  blocked_q = queue_new();
  blocked_q_lock = semaphore_create();
  semaphore_initialize(blocked_q_lock,1);
  dead_q = queue_new();
  dead_q_lock = semaphore_create();
  semaphore_initialize(dead_q_lock,1);
  dead_sem = semaphore_create();
  semaphore_initialize(dead_sem,0);    
  runnable_q_lock = semaphore_create();
  semaphore_initialize(runnable_q_lock,1);
  clean_up_thread = minithread_create(clean_up, NULL);
  multilevel_queue_enqueue(runnable_q,
    clean_up_thread->priority,clean_up_thread);
  runnable_count++;
  minithread_clock_init(TIME_QUANTA, (interrupt_handler_t)clock_handler);
  init_alarm();
  current_thread = minithread_create(mainproc, mainarg);
  minithread_switch(&dummy_ptr, &(current_thread->stacktop));
  return;
}
开发者ID:kentalabur,项目名称:egs,代码行数:46,代码来源:minithread.c

示例6: minimsg_initialize

/* performs any required initialization of the minimsg layer. */
void minimsg_initialize() {
	int i;

	msgmutex = semaphore_create();
    semaphore_initialize(msgmutex, 1);

    bound_ports_free = semaphore_create();
    semaphore_initialize(bound_ports_free, BOUND_MAX_PORT_NUM - BOUND_MIN_PORT_NUM + 1);

    // Initialize ports array
	ports = (miniport_t*) malloc((BOUND_MAX_PORT_NUM + 1) * sizeof(miniport_t));

	if (ports == NULL) { // Fail if malloc() fails
      fprintf(stderr, "ERROR: minimsg_initialize() failed to malloc miniport_t array\n");
      return;
    }

    // Initialize each unbound port's data elements
    for (i = UNBOUND_MIN_PORT_NUM; i <= UNBOUND_MAX_PORT_NUM; i++) {
    	miniport_create_unbound(i);
    	ports[i]->u.unbound.incoming_data = queue_new();
    	ports[i]->u.unbound.datagrams_ready = semaphore_create();
    	semaphore_initialize(ports[i]->u.unbound.datagrams_ready, 0);
    }
}
开发者ID:jeherrera,项目名称:cs4411,代码行数:26,代码来源:minimsg.c

示例7: minisocket_create_socket

/*
 * Creates a socket 
 * The argument "port" is the port number of the created socket
 */
minisocket_t minisocket_create_socket(int port)
{
	minisocket_t newMinisocket;

	newMinisocket = (minisocket_t) malloc(sizeof(struct minisocket));

	if (newMinisocket == NULL)
		return NULL;

	//Initialize fields
	newMinisocket->port_number = port;
	newMinisocket->status = TCP_PORT_LISTENING;
	newMinisocket->seq_number = 0;
	newMinisocket->ack_number = 0;
	newMinisocket->data_buffer = NULL;
	newMinisocket->data_length = 0;
	newMinisocket->num_waiting_on_mutex = 0;
	newMinisocket->timeout = 100;

	newMinisocket->wait_for_ack_semaphore = semaphore_create();
	if (newMinisocket->wait_for_ack_semaphore == NULL)
	{
		free(newMinisocket);
		return NULL;
	}
	semaphore_initialize(newMinisocket->wait_for_ack_semaphore, 0);

	newMinisocket->mutex = semaphore_create();
	if (newMinisocket->mutex == NULL)
	{
		free(newMinisocket->wait_for_ack_semaphore);
		free(newMinisocket);
		return NULL;
	}
	semaphore_initialize(newMinisocket->mutex, 1);

	newMinisocket->packet_ready = semaphore_create();
	if (newMinisocket->packet_ready == NULL)
	{
		free(newMinisocket->mutex);
		free(newMinisocket->wait_for_ack_semaphore);
		free(newMinisocket);
		return NULL;
	}
	semaphore_initialize(newMinisocket->packet_ready, 0);

	newMinisocket->waiting_packets = queue_new();
	if (newMinisocket->waiting_packets == NULL)
	{
		free(newMinisocket->packet_ready);
		free(newMinisocket->mutex);
		free(newMinisocket->wait_for_ack_semaphore);
		free(newMinisocket);
		return NULL;
	}

	return newMinisocket;
}
开发者ID:authentic4269,项目名称:4411P2,代码行数:62,代码来源:minisocket.c

示例8: main

int
main(int argc, char *argv[]) {
  sem1 = semaphore_create();
  semaphore_initialize(sem1, 0);
  sem2 = semaphore_create();
  semaphore_initialize(sem2, 0);
  minithread_system_initialize(thread1, NULL);
  return -1;
}
开发者ID:kentalabur,项目名称:egs,代码行数:9,代码来源:test3.c

示例9: _retrieve_block

/* This needs to:
 * -get a block from the in-memory blocks if possible
 * -otherwise pull block from disk
 * -increment blocks' num_open counter
 * -we do NOT need to save the num_open update to disk, as it is reset after a 
 *  crash anyway.
 * 
 * Clients must ALWAYS check the return ID, in case a file was deleted.
 */
block_t _retrieve_block(int block_id)
{
	block_t block;
	minifile_t inode;
	int ret;
// todo - handle semaphores for inodes, destroy the in inode delete
	// First check if it's already in memory

	if (block_id < 0)
		return NULL;

	block = hashmap_get(retrieved_blocks, block_id);

	if (block != NULL && block->is_deleted == 0)
	{
		if ( block->block_type == BLOCK_TYPE_FILE
			|| block->block_type == BLOCK_TYPE_DIRECTORY)
		{
			block->num_open++;
			inode = (minifile_t) block;
			inode->u.data.mutex = semaphore_create();
			semaphore_initialize(inode->u.data.mutex, 1);
		}

		return block;
	}

	// Otherwise, get it from disk
	block = (block_t) malloc(sizeof(struct block));

	ret = _perform_full_disk_read(disk, block_id, (char*) block);

	// Setup the semaphore if it's an inode type

	// ONly check deleted for file/dir, as data blocks can have anything
	if (ret == 0 && !((block->block_type == BLOCK_TYPE_FILE || block->block_type == BLOCK_TYPE_DIRECTORY) && block->is_deleted == 1))
	{
		// Ensure num_open is set to just one, as we got it from disk (may have crashed with old data)
		hashmap_insert(retrieved_blocks, block_id, (void*) block);
		if ( block->block_type == BLOCK_TYPE_FILE
			|| block->block_type == BLOCK_TYPE_DIRECTORY)
		{
			inode = (minifile_t) block;
			inode->u.data.mutex = semaphore_create();
			semaphore_initialize(inode->u.data.mutex, 1);
			block->num_open = 1;
		}
		return block;
	}
	 else
	{
		return NULL;
	}
}
开发者ID:pb376,项目名称:cs4411-p6-submitted,代码行数:63,代码来源:block.c

示例10: main

void
main(void) {
  int maxcount = MAXCOUNT;
  
  size = head = tail = 0;
  empty = semaphore_create();
  semaphore_initialize(empty, 0);
  full = semaphore_create();
  semaphore_initialize(full, BUFFER_SIZE);

  minithread_system_initialize(producer, &maxcount);
}
开发者ID:DolphinWilly,项目名称:PortOSnix,代码行数:12,代码来源:buffer.c

示例11: command_move

void command_move(struct cmdStruct* commandsList, int socket)  {

  char fifoBuffer[__BUFFER_SIZE];
  int descr[2];
  int stdoutDescr = dup(STDOUT_FILENO);
  int stdinDescr = dup(STDIN_FILENO);
  int stderrDescr = dup(STDERR_FILENO);
  int size = 0;
  int status;
  int cStream = pipe(descr);
  int childPid;
  int semIdIn = semaphore_create(commandsList->words[1], 1);           /* Utworzenie semaforow do zabezpieczenia przed wielokrotną edycją */
  int semIdOut = semaphore_create(commandsList->words[2], 1);

  P(semIdIn, 0);
  P(semIdOut, 0);

  childPid = fork();

  if (childPid == 0)  {
    dup2(descr[1], 2);                                               /* przekierowanie stderr do FIFO_OUT */
    dup2(descr[1], 1);                                               /* przekierowanie stdout do FIFO_OUT */
    close(descr[0]);
    execvp("/bin/mv", commandsList->words);
                                                                     /* jezeli nie uda sie wykonac komendy, zglasza komunikat o bledzie i przywraca wejscia */
    dup2(stdinDescr, 0);                                              /* przywrocenie poprzednich wejsc */
    dup2(stdoutDescr, 1);
    dup2(stderrDescr, 2);
    info_remote_handler(socket, __COMMAND_EXEC_ERROR);
  } else  {
      dup2(descr[0], 0);                                             /* przekierowanie stdin na FIFO_IN */
      close(descr[1]);
      while (1)  {
        memset(fifoBuffer, 0, __BUFFER_SIZE);
        size = read(descr[0], fifoBuffer, sizeof(fifoBuffer));
        status = write(socket, fifoBuffer, size);
        if (size == 0)  {
          close(descr[0]);
          dup2(stdinDescr, 0);                                        /* przywrocenie poprzednich wejsc */
          dup2(stdoutDescr, 1);
          dup2(stderrDescr, 2);
          break;
        }
      }
      wait(0);
      V(semIdOut, 0);
      V(semIdIn, 0);
      if (semaphore_value_lookup(semIdIn, 0)) semaphore_remove(semIdIn);
      if (semaphore_value_lookup(semIdOut, 0)) semaphore_remove(semIdOut);
  }

}
开发者ID:AxuBlade,项目名称:TCPSrv,代码行数:52,代码来源:move.c

示例12: main

int
main(int argc, char * argv[]) {
  int maxcount = MAXCOUNT;
  
  size = head = tail = 0;
  empty = semaphore_create();
  semaphore_initialize(empty, 0);
  full = semaphore_create();
  semaphore_initialize(full, BUFFER_SIZE);

  minithread_system_initialize(producer, &maxcount);
  return -1;
}
开发者ID:Ekotlikoff,项目名称:Project2,代码行数:13,代码来源:buffer.c

示例13: main

int
main(void)
{
    pthread_t     pthread1, pthread2, pthread3;
    semaphore_t*   sem = g_sem;
    kern_return_t kr;

    setbuf(stdout, NULL);

    kr = semaphore_create(mach_task_self(), &sem[0], SYNC_POLICY_FIFO, 0);
    OUT_ON_MACH_ERROR("semaphore_create", kr);

    kr = semaphore_create(mach_task_self(), &sem[1], SYNC_POLICY_FIFO, 0);
    OUT_ON_MACH_ERROR("semaphore_create", kr);

    (void)pthread_create(&pthread1, (const pthread_attr_t *)0,
                         start_routine, (void *) 0);
    printf("created thread1=%lx\n", 0);

    (void)pthread_create(&pthread2, (const pthread_attr_t *)0,
                         start_routine, (void *) 1);
    printf("created thread2=%lx\n", 1);

    (void)pthread_create(&pthread3, (const pthread_attr_t *)0,
                         start_routine, (void *) 2);
    printf("created thread3=%lx\n", 2);

    // wait until all three threads are ready
    SEMAPHORE_WAIT(sem[1], 3);

//    printf("main: about to signal thread3\n");
//    semaphore_signal_thread(sem[0], pthread_mach_thread_np(pthread3));

    // wait for thread3 to sem_signal()
//    semaphore_wait(sem[1]);

    sleep(1);
    printf("main: about to signal all threads\n");
    semaphore_signal_all(sem[0]);

    // wait for thread1 and thread2 to sem_signal()
    SEMAPHORE_WAIT(sem[1], 3);

out:
    if (sem[0])
        semaphore_destroy(mach_task_self(), sem[0]);
    if (sem[1])
        semaphore_destroy(mach_task_self(), sem[1]);

    exit(kr);
}
开发者ID:010001111,项目名称:darling,代码行数:51,代码来源:mach_semaphore.c

示例14: block_device_init_driver

status_t block_device_init_driver (void)
{
  int32_t i ;
  char alpha_num[8], semaphore_name_buffer[64], * semaphore_prefix = "block_device_" ;
  char isr_semaphore_name[64] ;
  
  watch (status_t)
  {
    block_device_controls = kernel_malloc (sizeof (block_device_control_t) * 
        SOCLIB_BLOCK_DEVICES_NDEV, true) ;
    ensure (block_device_controls != NULL, DNA_OUT_OF_MEM) ;
    

    for (i = 0 ; i < SOCLIB_BLOCK_DEVICES_NDEV ; i++)
    {
      dna_itoa (i, alpha_num) ;
      dna_strcpy (semaphore_name_buffer, semaphore_prefix) ;
      dna_strcat (semaphore_name_buffer, alpha_num) ;
      dna_strcat (semaphore_name_buffer, "_sem") ;

      semaphore_create (semaphore_name_buffer, 1, 
          &block_device_controls[i] . semaphore_id) ;

      block_device_controls[i] . should_enable_irq = 
        (bool) SOCLIB_BLOCK_DEVICES[i] . should_enable_irq ;
      block_device_controls[i] . port = 
        (block_device_register_map_t) SOCLIB_BLOCK_DEVICES[i] . base_address ;

      cpu_read (UINT32, 
          & (block_device_controls[i] . port -> BLOCK_DEVICE_SIZE), 
          block_device_controls[i] . block_count) ;
      cpu_read (UINT32, 
          & (block_device_controls[i] . port -> BLOCK_DEVICE_BLOCK_SIZE), 
          block_device_controls[i] . block_size) ;

      if (block_device_controls[i] . should_enable_irq) {
        block_device_controls[i] . irq = SOCLIB_BLOCK_DEVICES[i] . irq ;
        interrupt_attach (0, SOCLIB_BLOCK_DEVICES[i] . irq, 0x0, 
            block_device_isr, false) ;
        dna_strcpy (isr_semaphore_name, semaphore_name_buffer) ;
        dna_strcat (isr_semaphore_name, "_isr") ;
        semaphore_create (isr_semaphore_name, 0, 
            &block_device_controls[i] . isr_semaphore_id) ;
      }

    }

    return DNA_OK ;
  }
}
开发者ID:marcoscunha,项目名称:reverse,代码行数:50,代码来源:block_device_init_driver.c

示例15: create_route_request

/* Create a route request struct - this stores information regarding the current
 * route discovery attempt.
 */
route_request_t create_route_request()
{
	route_request_t route_request = (route_request_t) malloc(sizeof(struct route_request));
	if (route_request == NULL)
		return NULL;

	route_request->threads_waiting = 0;
	route_request->initiator_sem = semaphore_create();
	route_request->waiting_sem = semaphore_create();
	semaphore_initialize(route_request->initiator_sem, 0);
	semaphore_initialize(route_request->waiting_sem, 0);
	route_request->interrupt_arg = NULL;

	return route_request;
}
开发者ID:pb376,项目名称:cs4411-p5,代码行数:18,代码来源:miniroute.c


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