本文整理汇总了C++中set_affinity函数的典型用法代码示例。如果您正苦于以下问题:C++ set_affinity函数的具体用法?C++ set_affinity怎么用?C++ set_affinity使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了set_affinity函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: printf_verbose
void *thr_reader(void *data)
{
unsigned long tidx = (unsigned long)data;
printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
set_affinity();
while (!test_go)
{
}
for (;;) {
pthread_mutex_lock(&lock);
assert(test_array.a == 8);
if (unlikely(rduration))
loop_sleep(rduration);
pthread_mutex_unlock(&lock);
nr_reads++;
if (unlikely(!test_duration_read()))
break;
}
tot_nr_reads[tidx] = nr_reads;
printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
"reader", pthread_self(), (unsigned long)gettid());
return ((void*)1);
}
示例2: printf_verbose
void *thr_writer(void *_count)
{
unsigned long long *count = _count;
printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
"writer", (unsigned long) pthread_self(),
(unsigned long) gettid());
set_affinity();
while (!test_go)
{
}
cmm_smp_mb();
for (;;) {
pthread_rwlock_wrlock(&lock);
test_array.a = 0;
test_array.a = 8;
if (caa_unlikely(wduration))
loop_sleep(wduration);
pthread_rwlock_unlock(&lock);
URCU_TLS(nr_writes)++;
if (caa_unlikely(!test_duration_write()))
break;
if (caa_unlikely(wdelay))
loop_sleep(wdelay);
}
printf_verbose("thread_end %s, thread id : %lx, tid %lu\n",
"writer", (unsigned long) pthread_self(),
(unsigned long) gettid());
*count = URCU_TLS(nr_writes);
return ((void*)2);
}
示例3: reset
static void reset(test_context *ctx)
{
rtems_status_code sc;
size_t i;
for (i = 0; i < TASK_COUNT; ++i) {
set_priority(ctx->task_ids[i], P(i));
set_affinity(ctx->task_ids[i], A(1, 1));
}
for (i = CPU_COUNT; i < TASK_COUNT; ++i) {
sc = rtems_task_suspend(ctx->task_ids[i]);
rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_ALREADY_SUSPENDED);
}
for (i = 0; i < CPU_COUNT; ++i) {
sc = rtems_task_resume(ctx->task_ids[i]);
rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_INCORRECT_STATE);
}
/* Order the idle threads explicitly */
for (i = 0; i < CPU_COUNT; ++i) {
const Per_CPU_Control *c;
const Thread_Control *h;
c = _Per_CPU_Get_by_index(CPU_COUNT - 1 - i);
h = c->heir;
sc = rtems_task_suspend(h->Object.id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
}
示例4: printf_verbose
void *thr_reader(void *data)
{
unsigned long tidx = (unsigned long)data;
printf_verbose("thread_begin %s, tid %lu\n",
"reader", urcu_get_thread_id());
set_affinity();
while (!test_go)
{
}
for (;;) {
pthread_mutex_lock(&per_thread_lock[tidx].lock);
assert(test_array.a == 8);
if (caa_unlikely(rduration))
loop_sleep(rduration);
pthread_mutex_unlock(&per_thread_lock[tidx].lock);
URCU_TLS(nr_reads)++;
if (caa_unlikely(!test_duration_read()))
break;
}
tot_nr_reads[tidx] = URCU_TLS(nr_reads);
printf_verbose("thread_end %s, tid %lu\n",
"reader", urcu_get_thread_id());
return ((void*)1);
}
示例5: printf_verbose
void *thr_writer(void *data)
{
unsigned long wtidx = (unsigned long)data;
printf_verbose("thread_begin %s, tid %lu\n",
"writer", urcu_get_thread_id());
set_affinity();
while (!test_go)
{
}
cmm_smp_mb();
for (;;) {
pthread_mutex_lock(&lock);
test_array.a = 0;
test_array.a = 8;
if (caa_unlikely(wduration))
loop_sleep(wduration);
pthread_mutex_unlock(&lock);
URCU_TLS(nr_writes)++;
if (caa_unlikely(!test_duration_write()))
break;
if (caa_unlikely(wdelay))
loop_sleep(wdelay);
}
printf_verbose("thread_end %s, tid %lu\n",
"writer", urcu_get_thread_id());
tot_nr_writes[wtidx] = URCU_TLS(nr_writes);
return ((void*)2);
}
示例6: start_counting
/**
* start_counting
*
* Arguments: <context_id> <event_set_id>
*
* Call the pfm_start system-call to start counting for a perfmon context
* that was previously stopped.
**/
static int start_counting(int argc, char **argv)
{
pfarg_start_t start_arg;
struct context *ctx;
struct event_set *evt;
cpu_set_t old_cpu_set;
int ctx_id, event_set_id;
int system_wide, rc;
memset(&start_arg, 0, sizeof(start_arg));
ctx_id = strtoul(argv[1], NULL, 0);
event_set_id = strtoul(argv[2], NULL, 0);
if (ctx_id <= 0 || event_set_id < 0) {
LOG_ERROR("context ID and event-set ID must be "
"positive integers.");
return EINVAL;
}
ctx = find_context(ctx_id);
if (!ctx) {
LOG_ERROR("Can't find context with ID %d.", ctx_id);
return EINVAL;
}
evt = find_event_set(ctx, event_set_id);
if (!evt) {
LOG_ERROR("Can't find event-set with ID %d in context %d.",
event_set_id, ctx_id);
return EINVAL;
}
start_arg.start_set = evt->id;
system_wide = ctx->ctx_arg.ctx_flags & PFM_FL_SYSTEM_WIDE;
if (system_wide && ctx->cpu >= 0) {
rc = set_affinity(ctx->cpu, &old_cpu_set);
if (rc) {
return rc;
}
}
rc = pfm_start(ctx->fd, &start_arg);
if (rc) {
rc = errno;
LOG_ERROR("pfm_start system call returned an error: %d.", rc);
return rc;
}
if (system_wide && ctx->cpu >= 0) {
revert_affinity(&old_cpu_set);
}
LOG_INFO("Started counting for context %d, event-set %d.",
ctx_id, event_set_id);
return 0;
}
示例7: run_child
static void run_child(size_t cpu)
{
struct child * self = &children[cpu];
self->pid = getpid();
self->sigusr1 = 0;
self->sigusr2 = 0;
self->sigterm = 0;
inner_child = self;
if (atexit(close_pipe)){
close_pipe();
exit(EXIT_FAILURE);
}
umask(0);
/* Change directory to allow directory to be removed */
if (chdir("/") < 0) {
perror("Unable to chdir to \"/\"");
exit(EXIT_FAILURE);
}
setup_signals();
set_affinity(cpu);
create_context(self);
write_pmu(self);
load_context(self);
notify_parent(self, cpu);
/* Redirect standard files to /dev/null */
freopen( "/dev/null", "r", stdin);
freopen( "/dev/null", "w", stdout);
freopen( "/dev/null", "w", stderr);
for (;;) {
sigset_t sigmask;
sigfillset(&sigmask);
sigdelset(&sigmask, SIGUSR1);
sigdelset(&sigmask, SIGUSR2);
sigdelset(&sigmask, SIGTERM);
if (self->sigusr1) {
perfmon_start_child(self->ctx_fd);
self->sigusr1 = 0;
}
if (self->sigusr2) {
perfmon_stop_child(self->ctx_fd);
self->sigusr2 = 0;
}
sigsuspend(&sigmask);
}
}
示例8: worker
void worker (unsigned name, unsigned mask) {
std::lock_guard<std::mutex> lock(m);
std::cout << "thread #" << name << "(" << mask << ")";
if (!set_affinity (mask))
std::cout << ": error set affinity\n";
else
std::cout << " is running with mask " << get_affinity () << std::endl;
}
示例9: set_affinity
void *perftest_thread(void *arg)
{
thread_data_t *thread_data = (thread_data_t *)arg;
int thread_index = thread_data->thread_index;
int write_elem = thread_data->write_elem;
int read_elem;
unsigned long random_seed = 1234;
unsigned long *value_ptr;
unsigned long *new_value_ptr;
unsigned long value;
unsigned long long reads = 0;
unsigned long long writes = 0;
set_affinity(thread_index);
rcu_register_thread();
rcu_defer_register_thread();
lock_mb();
while (goflag == GOFLAG_INIT)
poll(NULL, 0, 10);
switch (thread_data->mode)
{
case MODE_READONLY:
while (goflag == GOFLAG_RUN)
{
read_elem = get_random(&random_seed) % Tree_Scale;
value = *Values[read_elem];
reads++;
}
break;
case MODE_WRITE:
while (goflag == GOFLAG_RUN)
{
write_elem = get_random(&random_seed) % Tree_Size;
value_ptr = Values[write_elem];
value = get_random(&random_seed) % Tree_Scale + 1;
new_value_ptr = (unsigned long *)malloc(sizeof(unsigned long *));
*new_value_ptr = value;
rcu_assign_pointer(Values[write_elem], new_value_ptr);
defer_rcu(free, value_ptr);
writes++;
}
break;
}
rcu_unregister_thread();
rcu_defer_unregister_thread();
printf("thread %d reads %lld writes %lld\n", thread_index, reads, writes);
return NULL;
}
示例10: printf_verbose
void *test_hash_rw_thr_reader(void *_count)
{
unsigned long long *count = _count;
struct lfht_test_node *node;
struct cds_lfht_iter iter;
printf_verbose("thread_begin %s, tid %lu\n",
"reader", urcu_get_thread_id());
URCU_TLS(rand_lookup) = urcu_get_thread_id() ^ time(NULL);
set_affinity();
rcu_register_thread();
while (!test_go)
{
}
cmm_smp_mb();
for (;;) {
rcu_read_lock();
cds_lfht_test_lookup(test_ht,
(void *)(((unsigned long) rand_r(&URCU_TLS(rand_lookup)) % lookup_pool_size) + lookup_pool_offset),
sizeof(void *), &iter);
node = cds_lfht_iter_get_test_node(&iter);
if (node == NULL) {
if (validate_lookup) {
printf("[ERROR] Lookup cannot find initial node.\n");
exit(-1);
}
URCU_TLS(lookup_fail)++;
} else {
URCU_TLS(lookup_ok)++;
}
rcu_debug_yield_read();
if (caa_unlikely(rduration))
loop_sleep(rduration);
rcu_read_unlock();
URCU_TLS(nr_reads)++;
if (caa_unlikely(!test_duration_read()))
break;
if (caa_unlikely((URCU_TLS(nr_reads) & ((1 << 10) - 1)) == 0))
rcu_quiescent_state();
}
rcu_unregister_thread();
*count = URCU_TLS(nr_reads);
printf_verbose("thread_end %s, tid %lu\n",
"reader", urcu_get_thread_id());
printf_verbose("read tid : %lx, lookupfail %lu, lookupok %lu\n",
urcu_get_thread_id(),
URCU_TLS(lookup_fail),
URCU_TLS(lookup_ok));
return ((void*)1);
}
示例11: init_realtime
static int init_realtime(void)
{
struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = thread_info.thread_prio;
sched_setscheduler(0, SCHED_FIFO, &schedparm);
set_affinity();
return 0;
}
示例12: execute_cmd
/**
* @brief Execute command (fork, exec, wait)
*
* @param [in] argc number of cmd args
* @param [in] argv cmd args
*
* @return Operation status
* @retval 0 on success
* @retval -1 on error
*/
static int
execute_cmd(int argc, char **argv)
{
int i = 0;
if (0 >= argc || NULL == argv)
return -1;
if (g_cfg.verbose) {
printf("Trying to execute ");
for (i = 0; i < argc; i++)
printf("%s ", argv[i]);
printf("\n");
}
pid_t pid = fork();
if (-1 == pid) {
fprintf(stderr, "%s,%s:%d Failed to execute %s !"
" fork failed\n", __FILE__, __func__, __LINE__,
argv[0]);
return -1;
} else if (0 < pid) {
int status = EXIT_FAILURE;
/* Wait for child */
waitpid(pid, &status, 0);
if (EXIT_SUCCESS != status)
return -1;
} else {
/* set cpu affinity */
if (0 != set_affinity(0)) {
fprintf(stderr, "%s,%s:%d Failed to set core "
"affinity!\n", __FILE__, __func__,
__LINE__);
_Exit(EXIT_FAILURE);
}
/* drop elevated root privileges */
if (0 == g_cfg.sudo_keep && 0 != sudo_drop())
_Exit(EXIT_FAILURE);
errno = 0;
/* execute command */
execvp(argv[0], argv);
fprintf(stderr, "%s,%s:%d Failed to execute %s, %s (%i) !\n",
__FILE__, __func__, __LINE__,
argv[0], strerror(errno), errno);
_Exit(EXIT_FAILURE);
}
return 0;
}
示例13: timer
/*
* Use a timer to execute the actions, since it runs with thread dispatching
* disabled. This is necessary to check the expected processor allocations.
*/
static void timer(rtems_id id, void *arg)
{
test_context *ctx;
rtems_status_code sc;
size_t i;
ctx = arg;
i = ctx->action_index;
if (i == 0) {
sc = rtems_task_suspend(ctx->master_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
if (i < RTEMS_ARRAY_SIZE(test_actions)) {
const test_action *action = &test_actions[i];
rtems_id task;
ctx->action_index = i + 1;
task = ctx->task_ids[action->index];
switch (action->kind) {
case KIND_SET_PRIORITY:
set_priority(task, action->data.priority);
break;
case KIND_SET_AFFINITY:
set_affinity(task, action->data.cpu_set);
break;
case KIND_BLOCK:
sc = rtems_task_suspend(task);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
break;
case KIND_UNBLOCK:
sc = rtems_task_resume(task);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
break;
default:
rtems_test_assert(action->kind == KIND_RESET);
reset(ctx);
break;
}
check_cpu_allocations(ctx, action);
sc = rtems_timer_reset(id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
} else {
sc = rtems_task_resume(ctx->master_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_send(ctx->master_id);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
}
示例14: ATOM_FETCH_ADD
void *
Query_queue::threadInitQuery(void * This) {
Query_queue * query_queue = (Query_queue *)This;
uint32_t tid = ATOM_FETCH_ADD(_next_tid, 1);
// set cpu affinity
set_affinity(tid);
query_queue->init_per_thread(tid);
return NULL;
}
示例15: printf_verbose
void *thr_dequeuer(void *_count)
{
unsigned long long *count = _count;
int ret;
printf_verbose("thread_begin %s, thread id : %lx, tid %lu\n",
"dequeuer", pthread_self(), (unsigned long)gettid());
set_affinity();
ret = rcu_defer_register_thread();
if (ret) {
printf("Error in rcu_defer_register_thread\n");
exit(-1);
}
rcu_register_thread();
while (!test_go)
{
}
cmm_smp_mb();
for (;;) {
struct cds_lfq_node_rcu *qnode;
struct test *node;
rcu_read_lock();
qnode = cds_lfq_dequeue_rcu(&q);
node = caa_container_of(qnode, struct test, list);
rcu_read_unlock();
if (node) {
call_rcu(&node->rcu, free_node_cb);
nr_successful_dequeues++;
}
nr_dequeues++;
if (caa_unlikely(!test_duration_dequeue()))
break;
if (caa_unlikely(rduration))
loop_sleep(rduration);
}
rcu_unregister_thread();
rcu_defer_unregister_thread();
printf_verbose("dequeuer thread_end, thread id : %lx, tid %lu, "
"dequeues %llu, successful_dequeues %llu\n",
pthread_self(), (unsigned long)gettid(), nr_dequeues,
nr_successful_dequeues);
count[0] = nr_dequeues;
count[1] = nr_successful_dequeues;
return ((void*)2);
}