小编Str*_*keW的帖子

在JSP EL中session和sessionScope是否相同?

public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    @Override
    public String execute() throws Exception {
        ActionContext ctx = ActionContext.getContext();
        Integer counter = (Integer)ctx.getApplication().get("counter");
        // put counter into application 
        ctx.getApplication().put("counter", counter);
        // put username into session
        ctx.getSession().put("user", username);
        if (getUsername().equals("crazyit.org")
                && getPassword().equals("leegang")) {
            ctx.put("tip", "Login Success! ");
            return SUCCESS;
        }
        else {
            ctx.put("tip", "Login Falied!");
            return ERROR;
        }        
    }
}
Run Code Online (Sandbox Code Playgroud)

我把"counter"在应用"user"会话和"tip"ActionContext.在JSP中,我可以使用${session.user}${sessionScope.user}引用"user"属性.${request.tip}${requestScope.tip}参考 …

jsp el session-scope

17
推荐指数
2
解决办法
4万
查看次数

当我从信号处理程序调用非异步安全函数时,它总是不安全吗?

我只是想知道是否可以在信号处理程序中调用非异步安全函数。
引用 Linux 手册页 signal(7):

如果信号中断不安全函数的执行,并且处理程序调用不安全函数,则程序的行为是未定义的

TLPI

SUSv3 指出,表 21-1(异步安全函数列表)中未列出的所有函数都被认为对于信号而言是不安全的,但指出只有当信号处理程序的调用中断了某个函数的执行时,该函数才是不安全的。不安全函数,并且处理程序本身也调用不安全函数

我对上面引用的解释是,只有当信号处理程序没有中断非异步安全函数时,从信号处理程序调用非异步安全函数才是安全的

例如,我安装了一个 SIGINT 处理程序,它调用一个不安全的函数,crypt(3)该函数被认为是不可重入的,即不安全的。

sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;
sa.sa_handler = handler;
sigaction(SIGINT, &sa, NULL);
Run Code Online (Sandbox Code Playgroud)

我还在printf()中调用了无限循环main(),并且只运行主线程。

printf()问题是对于这个简单的例子,当处理程序中断执行并调用不安全函数时,我没有看到任何不好的事情发生。AFAK,printf()将获取控制台锁并具有内部缓冲区来执行缓冲 I/O,但其状态在本例中是一致的。虽然crypt()返回一个静态分配的字符串,但它不与其他函数或线程共享。

我误解了什么吗?我希望有人澄清一下,让信号处理程序中断主程序中不安全函数的执行并且本身也调用不安全函数总是不安全的,或者在某些情况下这样做是安全的(例如上面的简单示例

c linux signals async-safe

6
推荐指数
1
解决办法
2446
查看次数

C:两个不同的二进制搜索实现,一个陷入无限循环

这里有两个"健忘"二分搜索的实现,因为它们在完成之前不会检查完全匹配.

1)

int bsearch1(int A[], int n, int target)
{
    int low = 0, high = n - 1, mid = 0;
    while (low < high)
    {
        mid = (low + high) >> 1;
        if (target > A[mid])
            low = mid + 1;
        else
            high = mid;
    }
    if (low == high)
    {
        if (A[low] == target)
            return low;
    }

    return -1;
}
Run Code Online (Sandbox Code Playgroud)

2)

int bsearch2(int A[], int n, int target)
{
    int low = 0, high = n - …
Run Code Online (Sandbox Code Playgroud)

c algorithm binary-search

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

标签 统计

c ×2

algorithm ×1

async-safe ×1

binary-search ×1

el ×1

jsp ×1

linux ×1

session-scope ×1

signals ×1